Как вывести данные произвольного поля в админке отдельной колонкой

Как вывести данные произвольного поля в админке отдельной колонкой | n-wp.ru
Код, добавляющий в админку еще одну колонку, в которой выводится значение определенного произвольного поля.
👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →

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

Как вывести данные произвольного поля в админке отдельной колонкой

Для добавления отдельной колонки, которая будет видна в списке постов (Записи — Все записи), нужно немного поработать с файлом functions.php, внеся в него изменения. Например, нам нужно вывести отдельной колонкой для каждого поста значение произвольного поля source_link_custom_field, а если оно не заполнено, то вывести соответствующую пометку отсутствует.

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

function price_column_register( $columns ) {
$columns['price'] = __( 'Значение поля Source', 'my-plugin' );
 
return $columns;
}
add_filter( 'manage_edit-post_columns', 'price_column_register' );

price — это внутреннее название колонки. Чтобы не было путаницы, лучше, чтобы оно косвенно напоминало название произвольного поля. Используйте только английские буквы.
Значение поля Source — это заголовок колонки. Можете писать его на любом языке, который поддерживает ваш WordPress — это всего лишь текстовое пояснение.

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

function price_column_display( $column_name, $post_id ) {
if ( 'price' != $column_name )
return;
 
$price = get_post_meta($post_id, 'source_link_custom_field', true);
if ( !$price )
$price = '<em>' . __( 'отсутствует', 'my-plugin' ) . '</em>';
 
echo $price;
}
add_action( 'manage_posts_custom_column', 'price_column_display', 10, 2 );

Этот код просто выводит для каждого поста содержимое произвольного поля source_link_custom_field в ячейку price для каждого поста. Делается это с помощью стандартной функции get_post_meta. Если же значение произвольного поля не задано (произвольное поле в посте не имеет значения, не заполнено), то выводится текст отсутствует.

Вот в принципе и все. Привожу код полностью для вставки в functions.php:

// Регистрируем (резервируем) колонку для вывода значения произвольного поля source_link_custom_field
function price_column_register( $columns ) {
$columns['price'] = __( 'Значение поля Source', 'my-plugin' );
 
return $columns;
}
add_filter( 'manage_edit-post_columns', 'price_column_register' );

// Выводим содержимое произвольного поля в зарегистрированную колонку
function price_column_display( $column_name, $post_id ) {
if ( 'price' != $column_name )
return;
 
$price = get_post_meta($post_id, 'source_link_custom_field', true);
if ( !$price )
$price = '<em>' . __( 'отсутствует', 'my-plugin' ) . '</em>';
 
echo $price;
}
add_action( 'manage_posts_custom_column', 'price_column_display', 10, 2 );

Если вам нужно сделать так, чтобы можно было сортировать посты по значению произвольного поля, то добавьте еще этот код:

//делаем колонку сортируемой
function price_column_register_sortable( $columns ) {
$columns['price'] = 'price';
 
return $columns;
}
add_filter( 'manage_edit-post_sortable_columns', 'price_column_register_sortable' );

//определяем порядок сортировки при клике на название колонки
function price_column_orderby( $vars ) {
if ( isset( $vars['orderby'] ) && 'price' == $vars['orderby'] ) {
$vars = array_merge( $vars, array(
'meta_key' => 'price',
'orderby' => 'meta_value_num'
) );
}
 
return $vars;
}
add_filter( 'request', 'price_column_orderby' );

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

Если вам нужно как-то выбирать посты, ориентируясь на произвольные поля, вы так же может воспользоваться способом фильтрации постов в админке по произвольным полям.

Создай свой первый сайт на WordPress

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

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

  1. Decadencer

    Спасибо за развернутый ответ на вопрос!
    Отличная статья. Теперь у меня на сайте колонок с произвольными полями больше чем родных! :) Стало в разы удобней пользоваться админкой.

    Ответить
  2. Adward

    Можете подсказать, как в админке вывести формат записи?
    тот, что из списка post-formats?
    спасибо.

    Ответить