Как добавить пользовательскую колонку в таблицу "Управление категориями"?

13 янв. 2011 г., 15:58:13
Просмотры: 14.2K
Голосов: 9

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

Я пытаюсь добавить колонку с названием "Изображение" в таблицу, чтобы при отображении сетки категорий, если у категории есть изображение, оно отображалось в таблице.

Первым шагом для меня является определение правильного фильтра, чтобы вставить колонку в таблицу.

Я пробовал следующие варианты, но безрезультатно...

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;
}
0
Все ответы на вопрос 3
1
10

Добавление названия колонки

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);

Надеюсь, это было полезно.

8 мая 2013 г. 06:03:29
Комментарии

Да, это было полезно. Спасибо @LeoDang

Jasom Dotnet Jasom Dotnet
8 мая 2019 г. 16:32:23
10

Фильтр называется 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 — на странице редактирования категорий.

13 янв. 2011 г. 16:05:03
Комментарии

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

Scott B Scott B
13 янв. 2011 г. 17:02:30

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

Jan Fabry Jan Fabry
13 янв. 2011 г. 17:10:21

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

Scott B Scott B
13 янв. 2011 г. 17:27:37

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

Jan Fabry Jan Fabry
13 янв. 2011 г. 17:35:18

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

Scott B Scott B
13 янв. 2011 г. 17:37:21

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

Scott B Scott B
13 янв. 2011 г. 17:47:16

@Scott: Вероятно, лучше задать это как новый вопрос.

Jan Fabry Jan Fabry
13 янв. 2011 г. 17:49:47

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

Scott B Scott B
13 янв. 2011 г. 17:57:52

@Jan, это обычная практика, что первый аргумент пустой?

Scott B Scott B
13 янв. 2011 г. 17:59:41

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

Jan Fabry Jan Fabry
13 янв. 2011 г. 18:03:31
Показать остальные 5 комментариев
2

В дополнение к примеру от @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);

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

13 янв. 2014 г. 08:33:33
Комментарии

Все закомментировано в шаге 2.

tehlivi tehlivi
12 июн. 2017 г. 20:43:39

@tehlivi Спасибо за комментарий. Хотя он был оставлен давно, я обновил его с дополнительными пояснениями, надеюсь, это поможет будущим читателям.

西門 正 Code Guy - JingCodeGuy 西門 正 Code Guy - JingCodeGuy
7 апр. 2020 г. 01:09:26