Як вивести в записі колонку з довільним полем і зробити по ньому сортування
Стаття із зірочкою, для тих хто вже працює "Як вивести в записі колонку з довільним полем і зробити по ньому сортування"
Часто ми робимо довільні поля та довільні типи, які потрібні для розробки, але іноді потрібно зробити клієнту приємно та налаштувати виведення цього поля в окрему колонку панелі адміністратора, а ще краще якщо клієнт зможе сортувати цю колонку за переглядами та робити свій аналіз відвідуваності, не заходячи в google analytics або метрику.
Як зробити додатковий стовпчик у списку постів WordPress та налаштувати по ньому сортування.
Для початку вам потрібен буде фільтр manage_{$екран->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()); } } |
Екшен management_posts_custom_column викликає функцію posts_custom_column_views() яка відповідає за заповнення нового стовпця даними. У назві екшену ми можемо також бачити вказаний тип даних manage_{post_type}_спеціальний_стовпець. Ми можемо бачити що функції заповнення викликається інша функція яка передає їй дані 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.