Как добавить пользовательскую колонку в таблицу "Управление категориями"?
Я сделал это для записей, но не могу найти правильный способ обратиться к колонкам таблицы категорий.
Я пытаюсь добавить колонку с названием "Изображение" в таблицу, чтобы при отображении сетки категорий, если у категории есть изображение, оно отображалось в таблице.
Первым шагом для меня является определение правильного фильтра, чтобы вставить колонку в таблицу.
Я пробовал следующие варианты, но безрезультатно...
add_filter('manage_categories_columns', 'myFunction', 10, 2);
add_filter('manage_category_columns', 'myFunction', 10, 2);
function myFunction($cat_columns)
{
$cat_columns['cat_image_thumb'] = 'Изображение';
return $cat_columns;
}

Добавление названия колонки
function manage_my_category_columns($columns)
{
// добавляем 'Моя колонка'
$columns['my_column'] = 'Моя колонка';
return $columns;
}
add_filter('manage_edit-category_columns','manage_my_category_columns');
Далее мы хотим поместить в неё данные:
function manage_category_custom_fields($deprecated,$column_name,$term_id)
{
if ($column_name == 'my_column') {
echo 'тест';
}
}
add_filter ('manage_category_custom_column', 'manage_category_custom_fields', 10,3);
Надеюсь, это было полезно.

Фильтр называется manage_{$screen->id}_columns
, где $screen->id
имеет значение edit-category
, что в итоге даёт manage_edit-category_columns
.
Я обнаружил это, добавив var_dump()
в функцию get_column_headers()
, которая вызывается в print_column_headers()
, а та, в свою очередь, используется в wp-admin/edit-tags.php
— на странице редактирования категорий.

@Jan: Спасибо! Это сработало для заголовка столбца. Теперь я пытаюсь использовать ваш trace route, чтобы разобраться, как добавить вставку строки. Изучая edit-tags.php, я вижу вызов "tag_rows", который, как я полагаю, создает строки, но не могу найти эту функцию, чтобы сделать var_dump и получить имя фильтра. Есть идеи?

@Scott: Если речь идет об иерархической таксономии, такой как категории, tag_rows()
вызывает _term_rows()
, который в свою очередь вызывает _tag_row()
. Эта функция вызывает действие manage_{$taxonomy}_custom_column
, что в вашем случае будет manage_category_custom_column
.

@Jan спасибо. Я могу установить действие, но не получается заставить echo сработать.. действие > add_action('manage_category_custom_column', 'myFunction', 10, 2);

@Scott: Действительно, я был неправ, это фильтр, а не действие, поэтому вы должны возвращать контент, который хотите отобразить, а не выводить его - в отличие от пользовательских колонок записей, где нужно выводить его через echo.

OK, так гораздо лучше. Отлично работает с фильтром и return вместо действия и echo. Спасибо, Ян!

@Jan, Похоже, что ID категории не передается в функцию. У меня два аргумента в вызове функции, первый пустой, а второй содержит ID пользовательской строки. Мне стоит задать отдельный вопрос, так как исходный уже по сути решен?

Только что нашел. Это третий аргумент. Мне пришлось изменить фильтр на 10,3, и функция стала выглядеть как myColumnRows($empty_arg, $column_name, $category_id)

@Scott: Здесь это нормально: если ни один плагин не предоставляет данных для отображения в колонке, она должна оставаться пустой. Помните, это фильтр: первый аргумент — это значение, которое будет изменять ваш callback. echo '<td>'; do_action( 'custom_column' ); echo '</td>';
преобразуется в фильтр как echo '<td>'; echo apply_filters( 'custom_column', '' ); echo '</td>';
.

В дополнение к примеру от @LeoDang, пользовательский столбец применяется к пользовательской таксономии с помощью следующих фильтров.
Протестировано и проверено в WordPress 3.8
1.Добавление заголовка пользовательского столбца
// эти фильтры влияют только на пользовательские столбцы, стандартные столбцы останутся без изменений
// фильтр: manage_edit-{$taxonomy}_columns
function custom_column_header( $columns ){
$columns['header_name'] = 'Название заголовка для отображения';
return $columns;
}
add_filter( "manage_edit-shop-subcategory_columns", 'custom_column_header', 10);
2.Добавление данных в пользовательский столбец
// порядок параметров: значение_для_отображения, $column_name, $tag->term_id
// фильтр: manage_{$taxonomy}_custom_column
function custom_column_content( $value, $column_name, $tax_id ){
// var_dump( $column_name );
// var_dump( $value );
// var_dump( $tax_id );
// для нескольких пользовательских столбцов можно использовать имя столбца для различия
// хотя условие If работает, Switch более универсален и структурирован для нескольких столбцов
// if ($column_name === 'header_name') {
// echo '1234';
// }
switch( $column_name ) {
case 'header_name1':
// ваш код здесь
$value = 'название заголовка 1';
break;
case 'header_name2':
// ваш код здесь
$value = 'название заголовка 2';
break;
// ... аналогично для других столбцов
default:
break;
}
return $value; // это значение для отображения
}
add_action( "manage_shop-subcategory_custom_column", 'custom_column_content', 10, 3);
Вы также можете обратиться к исходному коду, опубликованному онлайн для получения обновлений и дополнительных заметок.
