В административной части блога в списке постов есть все необходимые данные о записях – теги, категории, автор, дата, комментарии. Но вот тем, кто активно использует произвольные поля, явно не хватает возможности вывода дополнительной колонки со значением определенного произвольного поля. Давайте создадим такую колонку.
Для добавления отдельной колонки, которая будет видна в списке постов (Записи – Все записи), нужно немного поработать с файлом 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' );
Однако сразу предупрежу, что лично у меня сортировка работает почему-то странно: в одном блоге все сортируется верно, в другом список постов при клике на название колонки исчезает, приходится открывать его заново. Так что последнюю часть кода я считаю экспериментальной и не включаю в обязательную часть.
Если вам нужно как-то выбирать посты, ориентируясь на произвольные поля, вы так же может воспользоваться способом фильтрации постов в админке по произвольным полям.
Спасибо за развернутый ответ на вопрос!
Отличная статья. Теперь у меня на сайте колонок с произвольными полями больше чем родных! :) Стало в разы удобней пользоваться админкой.
Можете подсказать, как в админке вывести формат записи?
тот, что из списка post-formats?
спасибо.