Настройка таблиц администратора WordPress: начало работы

Опубликовано: 2021-01-25

Каждый, кто использует WordPress, знаком с таблицами администратора WordPress, которые появляются во всех основных областях обзора, таких как страницы и сообщения. Один и тот же формат используется для этих типов таблиц в WordPress, что означает, что вы быстро научитесь их использовать. Но знаете ли вы, что вы можете изменить таблицы администратора WordPress и изменить отображаемую информацию или добавить свои собственные дополнительные столбцы?

В этой статье мы объясним, как вы можете это сделать. Давайте начнем!

Крючки

Чтобы отображать данные административных таблиц, WordPress расширяет встроенный класс WP_List_Table . Класс WP_List_Table представлен как частный класс в файле wp-admin/includes/class-wp-list-table.php . Закрытые классы называются закрытыми, поскольку они предназначены только для использования другими базовыми классами и функциями, а не разработчиками.

WordPress предлагает вам возможность изменять административные таблицы. Чтобы манипулировать столбцами таблиц, вы должны использовать один из фильтрующих хуков, которые WordPress предоставляет в файле wp-admin/includes/class-wp-posts-list-table.php .

В этом файле класс WP_Posts_List_Table расширяет класс WP_List_Table и переопределяет его свойства и методы для заполнения административных таблиц в соответствии с типом сообщения. Вы можете использовать хук manage_posts_columns для таблицы сообщений, manage_pages_columns для страниц и manage_{$post_type}_posts_columns , если вы хотите манипулировать столбцами таблицы пользовательских типов сообщений.

В этом файле также описаны столбцы, используемые по умолчанию для данных таблицы. Около строки 616 вводится массив $posts_columns и добавляются следующие столбцы:

  • Столбец флажка «cb» для массовых действий
  • Столбец «заголовок» сообщения
  • Столбец «автор» для автора поста
  • Столбец «Категории» для категорий, к которым принадлежит сообщение.
  • Столбец «Теги» сообщения
  • Колонка "комментарии"
  • Опубликованный столбец «дата»

Добавление пользовательского столбца в таблицы администрирования

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

Таблицы списка сообщений

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

Для начала нам нужно добавить имя нового столбца в массив имен заголовков столбцов. Давайте подробнее рассмотрим строку 663 файла class-wp-posts-list-table.php .

 if ( 'page' === $post_type ) { $posts_columns = apply_filters( 'manage_pages_columns', $posts_columns ); } else { $posts_columns = apply_filters( 'manage_posts_columns', $posts_columns, $post_type ); }

В этой части кода ясно, что мы должны использовать фильтр manage_posts_columns (дополнительную информацию см. здесь), поскольку мы хотим внести изменения в таблицу списка сообщений. Чтобы добавить имя столбца в массив заголовков столбцов, мы отредактируем файл functions.php нашей активной темы и вставим этот фрагмент кода:

 add_filter('manage_posts_columns','add_custom_columns'); function add_custom_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

Теперь, если мы обновим страницу списка сообщений администратора, мы увидим дополнительный столбец. На данном этапе в этом столбце не будет данных.

базовая настройка админ-таблиц wordpress

На следующем шаге нам нужно сообщить WordPress, какой контент будет отображаться в столбце. Для этого мы будем использовать действие manage_posts_columns , которое является частью общедоступной функции column_default , отвечающей за вывод столбцов. Это действие соответствует только неиерархическим типам сообщений, например сообщениям, и вы можете обнаружить его в строке 1258.

Что мы на самом деле сделаем здесь, чтобы заполнить содержимое, так это запустим оператор switch для всех настраиваемых столбцов, и, поскольку имя заголовка «last_modified» (как мы зарегистрировали его на нашем начальном шаге выше), мы повторим наш контент. Чтобы отобразить содержимое, мы воспользуемся встроенной функцией WordPress get_post_field и вернем желаемое поле, которое может быть любым столбцом из таблицы wp_posts в базе данных. В случае сбоя он вернет пустую строку.

Итак, в файл functions.php мы добавим следующий код:

 add_action( 'manage_posts_custom_column','custom_columns_content', 10, 2 ); function custom_columns_content ( $column_id, $post_id ) { switch( $column_id ) { case 'last_modified': echo get_post_field('post_modified', $post_id); break; } }

Вы можете убедиться, что это работает должным образом, обновив страницу еще раз.

Обратите внимание, что значение «Последнее изменение» для второго сообщения, которое никогда не изменялось после его первоначальной публикации, совпадает с датой публикации.

Таблица списка страниц

Чтобы сделать то же самое в таблице списка страниц, мы таким же образом добавляем имя столбца в массив имен заголовков столбцов. Разница на этот раз в том, что мы будем использовать хук manage_pages_columns , как показано ниже:

 add_filter('manage_pages_columns','add_custom_page_columns'); function add_custom_page_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

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

 add_action( 'manage_pages_custom_column','custom_columns_content', 10, 2 ); function custom_columns_content ( $column_id, $post_id ) { switch( $column_id ) { case 'last_modified': echo get_post_field('post_modified', $post_id); break; } }

После вставки приведенного выше кода в наш файл functions.php мы можем убедиться, что все работает должным образом, посетив таблицу администратора страниц в нашей области администрирования, где мы должны увидеть столбец «Последнее изменение».

Таблица пользовательских типов сообщений

Сначала мы создадим пользовательский тип записи, вставив приведенный ниже код в наш файл functions.php :

 function my_custom_post_type() { register_post_type( 'mycpt', array( 'labels' => array( 'name' => __( 'Custom Post Types' ), 'singular_name' => __( 'Custom Post Type' ) ), 'public' => true, 'has_archive' => true, 'rewrite' => array('slug' => 'mycpt'), 'show_in_rest' => true, ) ); } add_action( 'init', 'my_custom_post_type' );

В нашем меню администратора мы заметим, что был добавлен новый пункт под названием «Пользовательский тип сообщения».

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

Теперь у нас есть настройка Custom Post Type, и мы добавим новый заголовок столбца с его содержимым. Как упоминалось ранее, в случае CPT (Custom Post Type) мы должны использовать manage_{$post_type}_posts_columns , чтобы добавить наш пользовательский столбец.

{$post_type} должен быть идентичен первому аргументу функции register_post_type() , в данном случае это 'mycpt'.

Итак, фрагмент кода, который мы будем использовать в файле functions.php для добавления заголовка нашего столбца, будет следующим:

 add_filter( 'manage_mycpt_posts_columns','add_mycpt_custom_columns'); function add_mycpt_custom_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

И чтобы заполнить содержимое столбца:

 add_action( 'manage_mycpt_posts_custom_column','fill_mycpt_posts_custom_column'); function fill_mycpt_posts_custom_column( $column_id, $post_id ) { switch( $column_id ) { case 'last_modified': echo get_post_field('post_modified', $post_id); break; } }

Результаты должны быть примерно такими:

Сделать столбцы сортируемыми

Чтобы сделать столбец сортируемым, мы должны определить, какие пользовательские столбцы разрешено сортировать. Для этого мы используем manage_edit-{post-type}_sortable_columns с функцией обратного вызова.

Таким образом, в каждом случае типа сообщения мы будем добавлять один и тот же код (конечно, с уникальными именами функций).

Для постов:

 add_filter( 'manage_edit-post_sortable_columns', 'sortable_post_columns' ); function sortable_post_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

Для страниц:

 add_filter( 'manage_edit-page_sortable_columns', 'sortable_page_columns' ); function sortable_page_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

Для нашего пользовательского типа сообщений (mycpt):

 add_filter( 'manage_edit-mycpt_sortable_columns', 'sortable_mycpt_posts_columns' ); function sortable_mycpt_posts_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

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

Отключить сортировку для столбцов

Чтобы удалить функцию сортировки для столбца, нам просто нужно удалить его из массива. Если, например, мы хотим сделать это для столбца «дата», мы должны добавить дополнительную строку кода unset($columns['date']) . Это будет выглядеть так:

Для постов:

 add_filter( 'manage_edit-post_sortable_columns', 'sortable_post_columns' ); function sortable_post_columns( $columns ) { $columns['last_modified'] = 'Last modified'; unset($columns['date']); return $columns; }

Для страниц:

 add_filter( 'manage_edit-page_sortable_columns', 'sortable_page_columns' ); function sortable_page_columns( $columns ) { $columns['last_modified'] = 'Last modified'; unset($columns['date']); return $columns; }

Для нашего пользовательского типа сообщений (mycpt):

 add_filter( 'manage_edit-mycpt_sortable_columns', 'sortable_mycpt_posts_columns' ); function sortable_mycpt_posts_columns( $columns ) { $columns['last_modified'] = 'Last modified'; unset($columns['date']); return $columns; }

Теперь, если вы посетите соответствующую таблицу, вы заметите, что метка «Дата» больше не активна (и, следовательно, этот столбец больше не сортируется).

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

крючки для админ-таблиц wordpress

Вы могли заметить, что хуки, которые мы используем для сортировки столбцов, на самом деле не следуют шаблону. Вы ожидаете, что это будут manage_posts_sortable_columns , manage_pages_sortable_columns и manage_mycpt_posts_sortable_columns соответственно. К сожалению, это всего лишь вопрос плохого названия. Тем не менее очень полезно иметь такую ​​сводную таблицу в качестве легкого напоминания.

Изменение ширины столбцов

Чтобы настроить ширину столбца, мы будем использовать хук действия admin_head , который WordPress предоставляет и выполняет в разделе заголовка для всех страниц администрирования, которые включают CSS или JS.

В качестве примера попробуйте ввести приведенный ниже код в файл functions.php :

 add_action('admin_head', 'my_column_width'); function my_column_width() { echo '<style type="text/css">'; echo '.table-view-list.posts .column-title { width:120px !important; overflow:hidden }'; echo '</style>'; }

Здесь мы использовали .column-title title столбца title, который является общим для всех административных таблиц, и .table-view-list.posts . В совокупности это гарантирует, что CSS будет применяться только в таблице со списком сообщений.

Чтобы добиться того же для других наших экранов администратора (например, страниц), вместо этого мы будем использовать table-view-list.pages .

Вывод

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