Найти в Дзене
Эдуард

WordPress добавляем и удаляем колонки в списке постов в админке

Сегодня в WordPress добавляем и удаляем колонки в списке постов в админке. Это нужно, допустим, тогда, когда вы добавляете метабоксы или кастомные поля в настройки записи, и они по умолчанию не выводтся в админке в списке постов, но они нужны именно там.

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

add_filter( ‘manage_POSTTYPE_posts_columns’, ‘my_custom_columns_filter’ );
function my_custom_columns_filter($columns) {
unset( $columns[‘date’] );
$columns[‘subtitle’] = __( ‘Sub Title’, ‘your_text_domain’ );
$columns[‘country’] = __( ‘Country’, ‘your_text_domain’ );
return $columns;
}

Немного разберемся, что мы делаем в коде выше:

Добавляем фильтр колонок, обратите внимание, у каждого типа записи (post, page и даже у custom post type, который вы можете добавить сами) есть отдельный фильтр, поэтому в функции добавления фильтра add_filter нужно заменить слово POSTTYPE на название желаемого типа записи (например post, и тогда фильтр будет называться manage_post_posts_columns.

Далее мы описываем функцию, которая и будет фильтровать колонки. WordPress в неё передаёт ассоциативный массив с колонками которые уже добавлены. Колонки в этом массиве можно удалить (тогда они не будут выводится в списке), можно отсортировать или просто изменить порядок (чтобы изменить порядок колонок) и добавить новую. При этом в массиве ключом является id колонки, а значением – строка-заголовок, которая будет выводится в списке в заголовке колонки.

В коде выше мы удаляем колонку date, чтобы не выводить в списке дату публикации записи, а также добавляем колонки Sub Title и Country.

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

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

add_action( ‘manage_POSTTYPE_posts_custom_column’ , ‘my_custom_columns_content’, 10, 2 );
function my_custom_columns_content( $column, $post_id ) {
switch ( $column ) {
case ‘subtitle’ :
echo get_post_meta( $post_id , ‘subtitle’ , true );
break;
case ‘country’ :
echo get_post_meta( $post_id , ‘country’ , true );
break; }
}

И всё. пропуски в списке записей заполнены. Аналогично, как и в случае с фильтром, здесь у каждого типа записей есть свой action, в котором POSTTYPE нужно заполнить необходимым типом записи, чтобы получилось, например вот так: manage_post_posts_custom_column.

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

Поэтому при помощи конструкции switch мы определяем для какой колонки мы сейчас выводим значения, и выводим произвольное поле для этой записи и этой колонки.

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