В этом уроке покажу, как добавить колонку с количеством просмотров в таблицу с постами и отсортировать её по значению произвольного поля.
В качестве произвольного поля я взял количество просмотров записи, ну, и если вы кликнете по заголовку таблицы «Количество просмотров», то посты соответственно будут сортироваться по возрастанию или убыванию просмотров (если кликнуть второй раз).
Другие фильтры записей и постраничная навигация при этом будут работать как обычно.
Про добавление колонок для типов записей, таксономий, пользователей, комментариев и так далее у меня есть подробнейший урок.
Сейчас же добавим колонку с выводом значения произвольного поля для обычных записей WordPress.
add_filter( 'manage_edit-post_columns', 'true_add_post_columns', 25 ); function true_add_post_columns( $my_columns ){ $my_columns[ 'prosmort' ] = 'Количество просмотров'; return $my_columns; } add_action( 'manage_posts_custom_column', 'true_fill_post_columns', 25 ); function true_fill_post_columns( $column ) { if( 'prosmort' == $column ) { $views = get_post_meta( get_the_ID(), 'views', true ); echo $views ? $views : 0; // выводим 0, если произвольное поле не заполнено } }
Не знаете, куда вставлять код из урока?
А вот нам придётся познакомиться с хуком manage_{screen_id}_sortable_columns
, значение {screen_id}
для страницы записей будет edit-post
, а значит и хук примет вид manage_edit-post_sortable_columns
. Чтобы узнать {screen_id} можете воспользоваться функцией get_current_screen().
Или можете например воспользоваться таблицей:
Экран | Хук |
---|---|
Записи | manage_edit-post_sortable_columns |
Страницы | manage_edit-page_sortable_columns |
Произвольные типы постов | manage_edit-{тип поста}_sortable_columns |
Рубрики | manage_edit-category_sortable_columns |
Метки | manage_edit-post_tag_sortable_columns |
Произвольные таксономии | manage_edit-{таксономия}_sortable_columns |
Библиотека файлов | manage_upload_sortable_columns |
Комментарии | manage_edit-comments_sortable_columns |
Пользователи | manage_users_sortable_columns |
Суть легка – в массив сортируемых колонок добавляем нашу:
add_filter( 'manage_edit-post_sortable_columns', 'true_sortable_column' ); function true_sortable_column( $columns ){ $columns[ 'prosmort' ] = 'views'; // $columns[ 'ID колонки' ] = 'Значение параметра orderby' // Кстати, здесь вы также можете сделать любую колонку несортируемой, просто удалите её из массива // unset( $columns[ 'date' ] ); return $columns; }
После этого наша колонка станет сортируемой, но пока что ничего не будет работать до тех пор, пока мы не перейдём к следующему шагу.
О, а вот тут конечно интересно. Код сильно зависит от того, что конкретно вы будете сортировать. В этом примере мы сортируем посты (записи) и поэтому все наши старания ограничатся использованием хука pre_get_posts.
add_action( 'pre_get_posts', 'true_orderby_prosmotr' ); function true_orderby_prosmotr( $query ) { // так как сортировка будет осуществляться только в админке if( ! is_admin() ) { return; } // получаем значение параметра сортировки $orderby = $query->get( 'orderby'); if( 'views' == $orderby ) { // 'views' - параметр в GET-запросе $query->set( 'meta_key', 'prosmort' ); // 'prosmort' - название произвольного поля $query->set( 'orderby', 'meta_value_num' ); // если сортировка не по числовому значению, а по алфавиту, замените на 'meta_value' } }
Заметки:
orderby
, например, если вы хотите отсортировать пользователей по дате их регистрации, то скипаем смело этот шаг.pre_get_posts
у нас сработает для любых типов постов – записей, страниц, библиотеки файлов и любых произвольных.pre_get_users
.pre_get_comments
.pre_get_terms
.Раньше, чтобы заставить работать что-либо, кроме постов, нужно было устраивать свистопляски, но теперь все фильтры очень похожи друг на друга.
Ну и ещё раз то, что у нас получилось:
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Упиваюсь Вашим блогом как интереснейшей книгой, спасибо большое!)))
Очень приятно, пожалуйста! 🙃
Оказывается для своего типа записи хук нужно писать иначе:
manage_(post_type)_posts_custom_column
Спасибо, за очень полезную статью!
Есть ли информация по subsubsub в пользователях? Как можно в пользователи в админке добавить свои меню над таблицей?