Как вывести в записи колонку с произвольным полем и сделать по ней сортировку
Статья со звездочкой, для тех кто уже работает «Как вывести в записи колонку с произвольным полем и сделать по ней сортировку»
Часто мы делаем произвольные поля и произвольные типы которые нужны для разработки, но иногда нужно сделать клиенту приятно и настроить вывод этого поля в отдельную колонку панели администратора, а еще лучше если клиент сможет сортировать эту колонку по просмотрам и делать свой анализ посещаемости, не заходя в google analytics или метрику.
Как сделать дополнительный столбик в списке постов WordPress и настроить по нему сортировку.
Для начала вам нужен будет фильтр manage_{$screen->id}_sortable_column вместо $screen->id вам будет необходимо указать имя типа данных, ниже вы увидите на примере это.
Фильтр передает массив с именами сортируемых столбцов в качестве ключей, и данные для вывода как значение. Параметр «orderby» указывает, для каких столбцов будет включена сортировка. Также вы можете отключить сортировку для определенных столбцов «unsortable».
Яснее все будет рассмотреть на примере создания столбца
1 2 3 4 5 6 7 8 9 10 11 12 |
// Add it to a column in WP-Admin add_filter('manage_posts_columns', 'posts_column_views'); add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2); function posts_column_views($defaults){ $defaults['post_views'] = __('Views'); return $defaults; } function posts_custom_column_views($column_name, $id){ if($column_name === 'post_views'){ echo getPostViews(get_the_ID()); } } |
Экшен manage_posts_custom_column вызывает функцию posts_custom_column_views() которая отвечает за заполнение нового столбца данными. В названии экшена мы можем видеть также указанный тип данных manage_{post_type}_custom_column. Мы можем видеть что в функции заполнения вызывается другая функция которая передает ей данные getPostViews().
Рассмотрим функцию getPostViews()
1 2 3 4 5 6 7 8 9 10 11 |
// function to display number of posts. function getPostViews($postID){ $count_key = 'post_views_count'; $count = get_post_meta($postID, $count_key, true); if($count==''){ delete_post_meta($postID, $count_key); add_post_meta($postID, $count_key, '0'); return "0 View"; } return $count.' Views'; } |
Если в переменную $count мы получили пустое значение или она скорее всего попросту не существует. Если переменная оказалась пустой, то мы создаем кастомное поле для текущего поста и вкладывает в него нулевое значение «0 View».
Функция которая увеличивает показатель просмотров на 1 при просмотре страницы
Далее для того чтобы добавлять новые значения было бы отлично вложить в код шаблона, в файл single.php, так как именно он отвечает за вызов функции в записях типа Post.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// function to count views. function setPostViews($postID) { $count_key = 'post_views_count'; $count = get_post_meta($postID, $count_key, true); if($count==''){ $count = 0; delete_post_meta($postID, $count_key); add_post_meta($postID, $count_key, '0'); }else{ $count++; update_post_meta($postID, $count_key, $count); } } |
В начале функции мы объявляем переменные, о которых говорили ранее, поэтому что в них храниться читайте выше.
Далее если счетчик не создан, функция его создает и кладет первое значение в произвольное поле счетчика. Если переменная $count непустая, то мы берем ее значение и увеличиваем его на 1.
Если вы это все проделаете, то сможете видеть новую колонку в разделе записей, в панели администратора с количеством просмотров, она будет заполнена если у записи были просмотры.
Добавляем сортировку к колонке в WordPress
Далее мы рассмотрим пример кода для этого случая, но если вы вчитаетесь и разберетесь, то сможете добавить сортировку для любой колонки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
add_filter( 'manage_edit-post_sortable_columns', 'my_sortable_post_column' ); function my_sortable_post_column( $columns ) { $columns['post_views'] = 'post_views'; //To make a column 'un-sortable' remove it from the array //unset($columns['date']); return $columns; } add_action( 'pre_get_posts', 'my_view_orderby' ); function my_view_orderby( $query ) { if( ! is_admin() ) return; $orderby = $query->get( 'orderby'); if( 'post_views' == $orderby ) { $query->set('meta_key','post_views_count'); $query->set('orderby','meta_value_num'); //$query->set('order', ASC); } } |
Фильтр manage_edit-post_sortable_columns указывает что наша колонка может сортироваться. Ниже я добавил закоментированую строчку кода, с помощью которой вы можете наоборот отключать сортировку нужной строки.
В экшене pre_get_posts я вызываю функцию my_view_orderby(). Рассмотрим ее построчно.
- Сначала мы проверяем был ли пользователь залогинен.
- Если пользователь залогинен, то берем параметр запроса «orderby».
- Если параметр «orderby» вернул название нашей колонки ‘post_views’, то мы указываем по какому произвольному полю сортировать и тот момент, что сортировка должна быть по числовым данным.
Пробуйте и пишите о достижениях в комментарии, будет интересно знать ваше мнение об уроке. Вот так получилось у меня.

/*

- Базовый курс по веб-дизайну;
- Верстка сайтов;
- Общий курс по CMS WordPress и продолжение курса по разработке шаблонов;
- Разработка сайтов на PHP.