Отображение настраиваемого столбца в таксономии CPT

Вопрос или проблема

Я пытаюсь добавить колонку в один из своих пользовательских типов записей, но только на странице редактирования таксономии.

У меня зарегистрирована таксономия “event-categories” для моего пользовательского типа записей “events”.

Я могу успешно добавить пользовательскую колонку на экран редактирования пользовательского типа записей, но не могу заставить хук работать на странице редактирования таксономии.

Погружаясь в некоторые из основных файлов, я смог локализовать хук

$taxonomies = apply_filters( "manage_taxonomies_for_{$post_type}_columns", $taxonomies, $post_type );

внутри class-wp-posts-list-table.php, что заставляет меня верить, что это возможно, и добавлять пользовательские колонки на этой странице. Но когда я пытаюсь добавить колонку, ничего на самом деле не происходит.

function events_color_column($defaults) {
    $defaults['event_cat_color'] = 'Цвет категории события';
    return $defaults;
}

function events_column_content($column_name, $post_ID) {
    if ($column_name == 'event_cat_color') {
       echo 'Цвет события : #2432';
    }
}
add_filter('manage_taxonomies_for_events_columns', 'events_color_column');
add_action('manage_taxonomies_for_events_column', 'events_color_column_content', 10, 2);

но если я просто изменю фильтр+действие на ‘manage_events_columns’ и ‘manage_events_column’, все работает на экране пользовательского типа записей.

Может кто-то увидеть, что я делаю не так, или это ошибка, которую нужно исправить в ядре?

Правка:

Мне удалось добавить в хуки на странице пользовательской таксономии, чтобы отображать заголовок колонки, сделав следующее:

Для любого, кто сталкивается с подобными проблемами, необходимо передать идентификатор страницы. Для меня сработало следующее:

  add_filter('manage_edit-event_categories_columns', 'events_color_column');

Но я не могу понять, почему контент не выводится в каждую колонку, используя

  add_action('manage_edit-event_categories_custom_column', 'events_color_column_content', 10, 2);

Я также пробовал передать имя таксономии, имя типа записи, но ничего не работает. Что я здесь упускаю?

Окончательные работающие хуки, которые мне удалось выяснить, это:

// добавление дополнительной колонки на страницу event_categories
// для отображения цвета
function events_color_column($defaults) {
    $defaults['event_cat_color'] = 'Цвет категории события';
    return $defaults;
}

function events_color_column_content($column_name, $post_ID) {  
    echo 'Цвет события : #2432';
}
add_filter('manage_edit-event_categories_columns', 'events_color_column');
add_action('manage_event_categories_custom_column', 'events_color_column_content', 10, 2);

Используя

if ($column_name == 'event_cat_color') {
       echo 'Цвет события : #2432';
    }

не сработало с этим хуком действия. Удаление условия и просто echo вывода работает.

незначительные проблемы в вашем коде, которые необходимо исправить

В вызове add_action вы используете неправильное имя функции

events_color_column_content вместо events_column_content

Хук, который вы используете, должен быть manage_edit-{taxonomy}_custom_column для пользовательских столбцов таксономии, а не manage_edit-{taxonomy}_columns.

function events_color_column($columns) {
    $columns['event_cat_color'] = 'Цвет категории события';
    return $columns;
}

function events_column_content($content, $column_name, $term_id) {
    if ($column_name == 'event_cat_color') {
       $content="Цвет события : #2432";
    }
    return $content;
}

add_filter('manage_edit-event_categories_columns', 'events_color_column');
add_action('manage_event_categories_custom_column', 'events_column_content', 10, 3);

Ответ или решение

Как добавить пользовательский столбец в таксономию на странице редактирования CPT (пользовательского типа записи)

В мире разработки WordPress иногда может возникнуть необходимость добавить пользовательские столбцы на страницы редактирования таксономий для пользовательских типов записей. В этой статье мы исследуем, как добавить кастомный столбец к таксономии event-categories, связанной с пользовательским типом записи events.

Шаг 1: Добавление заголовка столбца

Сначала создадим функцию, которая добавит заголовок нового столбца в таблицу таксономий. Для этого мы используем фильтр manage_edit-{taxonomy}_columns. В нашем случае таксономия называется event_categories, поэтому мы будем использовать manage_edit-event_categories_columns.

function events_color_column($columns) {
    $columns['event_cat_color'] = 'Цвет категории события'; // Заголовок столбца
    return $columns;
}

add_filter('manage_edit-event_categories_columns', 'events_color_column');

Шаг 2: Добавление контента в столбец

Теперь, когда мы добавили заголовок столбца, необходимо создать функцию, которая будет отображать контент в этом столбце. Мы используем хук manage_{taxonomy}_custom_column, который в нашем случае будет manage_event_categories_custom_column.

function events_column_content($content, $column_name, $term_id) {
    if ($column_name == 'event_cat_color') {
        $content = 'Цвет события: #2432'; // Данные для отображения в столбце
    }
    return $content;
}

add_action('manage_event_categories_custom_column', 'events_column_content', 10, 3);

Общий итог

Теперь ваша кодовая база должна выглядеть примерно так:

// Добавление заголовка нового столбца
function events_color_column($columns) {
    $columns['event_cat_color'] = 'Цвет категории события';
    return $columns;
}

add_filter('manage_edit-event_categories_columns', 'events_color_column');

// Добавление контента в новый столбец
function events_column_content($content, $column_name, $term_id) {
    if ($column_name == 'event_cat_color') {
        $content = 'Цвет события: #2432'; // Измените на вашу логику получения цвета
    }
    return $content;
}

add_action('manage_event_categories_custom_column', 'events_column_content', 10, 3);

Заключение

В результате вы успешно добавили кастомный столбец на страницу редактирования таксономий вашего пользовательского типа записи. Теперь вы можете отображать любой контент в новом столбце, включая данные, полученные из базы данных или другие метаданные, связанные с вашими событиями. Такой подход увеличивает удобство управления данными и позволяет вам наглядно представлять дополнительную информацию.

Если у вас остались вопросы или вам нужна помощь с другими аспектами работы с WordPress, не стесняйтесь задавать их.

Оцените материал
Добавить комментарий

Капча загружается...