Як змінити або додати спеціальні стовпці до списку публікацій у WordPress Admin
WordPress дозволяє змінювати та додавати стовпці до списку публікацій, сторінок або будь-якого спеціального типу публікації в панелі адміністратора. У цій публікації ми розглянемо, як!
Необхідно розглянути два хуки: один фільтр для позиції та заголовка стовпця та одну дію для виведення стовпця для кожної публікації. Тип повідомлення є частиною імен хуків. Розглянемо їх по черзі, починаючи з фільтра.
Колонковий фільтр
Фільтр для зміни, видалення або додавання стовпців до списку публікацій на панелі адміністратора WordPress – це manage_{$post_type}_posts_columns. Обмін {$post_type}з потрібним типом поста. Наприклад; якщо ви хочете редагувати стовпці для типу публікації " post", назва фільтра буде manage_post_posts_columns. А для спеціального типу публікації " product" назва фільтра буде manage_product_posts_columns.
PS: WordPress має фільтр стовпців виключно для публікацій типу " page": manage_pages_columns, але ви досягнете того самого результату, використовуючи фільтр manage_page_posts_columns.
У якості аргументу фільтра ви отримуєте повний масив усіх стовпців для цього типу публікації. Кожен стовпець має унікальний ключ, і його значення є мітками, показаними в заголовку стовпця. Приклади ключів: " cb" для стовпця прапорця та " title" для стовпця заголовка публікації. Порядок елементів у масиві визначає порядок стовпців.
Що вам потрібно зробити, щоб додати новий стовпець, це просто додати нову пару ключ + значення до масиву та повернути його. Ви можете маніпулювати масивом як забажаєте – наприклад, змінити його порядок.
Хук вмісту стовпця
Який хук потрібно використовувати для керування виведенням вмісту стовпця, залежить від того, чи налаштовано тип публікації на ієрархічний чи ні. Тип ієрархічної посади було визначено як 'hierarchical' => trueу register_post_type. Будь-які неієрархічні типи публікацій, включаючи вбудований тип публікації WordPress «post», використовують ім’я хука manage_{$post_type}_custom_column. Будь-які ієрархічні типи публікацій, включаючи вбудований тип публікації WordPress «page», використовують ім’я хука manage_pages_custom_column(примітка: назва типу посту не додається до імені хука).
У якості аргументів цього хука ви отримуєте назву стовпця, який є ключем, згаданим у фільтрі стовпців вище (наприклад, ‘ cb‘ для стовпця прапорця), а по-друге, ідентифікатор публікації. Цей хук запускається для кожного допису, і основна передумова полягає в тому, що ви перевіряєте, чи є у нас правильний тип стовпця (за ключем), і якщо ми, використовуємо ідентифікатор допису, щоб отримати мета допису або подібне та вивести, що ти хочеш.
Приклади
Давайте розглянемо код практичних прикладів.
Додайте спеціальний стовпець до публікацій, у якому відображається спеціальна мета публікації
Це найпростіший спосіб додавання спеціальних стовпців. Припустімо, ми хочемо додати спеціальний стовпець до публікації типу "публікація". Ми хочемо, щоб він був у самому кінці стовпців під назвою «Перевірено», і він повинен виводити «Так» або «Ні» залежно від спеціального мета-значення допису. Примітка: цей приклад не включає збереження або оновлення користувацького мета-мета допису.
У нашій functions.phpабо будь-де в нашій темі чи коді плагіна ми додамо сам стовпець, об’єднавши його з масивом стовпців, а в хуку для виведення стовпця ми отримаємо значення мета допису та виведемо його.
add_filter('manage_post_posts_columns', function($columns) {
return array_merge($columns, ['verified' => __('Verified', 'textdomain')]);
});
add_action('manage_post_posts_custom_column', function($column_key, $post_id) {
if ($column_key == 'verified') {
$verified = get_post_meta($post_id, 'verified', true);
if ($verified) {
echo '<span style="color:green;">'; _e('Yes', 'textdomain'); echo '</span>';
} else {
echo '<span style="color:red;">'; _e('No', 'textdomain'); echo '</span>';
}
}
}, 10, 2);
Вихід може бути будь-яким, я просто додав spanнавколо виводу текст із різними кольорами для легкої ідентифікації.
Додайте настроюваний стовпець до ієрархічного настроюваного типу допису, який відображає його попередній допис
Якщо тип публікації є ієрархічним, публікації можуть мати батьківські публікації. Скажімо, у нас є ієрархічний настроюваний тип допису «subject» для шкільних предметів, де є звичка створювати багато дописів для дітей і навіть дітей дописів для дітей. Для кращого огляду ми хочемо додати стовпець, який відображає батьківську тему публікації («кореневу тему»). Якщо публікація є публікацією верхнього рівня, відображається простий «-», інакше стовпець виводить заголовок батьківської публікації предка в посилання для редагування публікації.
Оскільки ми маємо на увазі ієрархічний тип публікації, нам потрібно використовувати інший хук для виведення вмісту стовпця, ніж у прикладі вище, але процес точно такий же.
Цей код також показує приклад того, як додати стовпець у середину масиву стовпців. Ми визначаємо, що наш стовпець має бути перед «автором», і використовуємо функції масиву PHP, щоб додати елемент у правильну позицію.
add_filter('manage_subject_posts_columns', function($columns) {
$offset = array_search('author', array_keys($columns));
return array_merge(array_slice($columns, 0, $offset), ['ancestor' => __('Ancestor', 'textdomain')], array_slice($columns, $offset, null));
});
add_action('manage_pages_custom_column', function($column_key, $post_id) {
if ($column_key == 'ancestor') {
$ancestors = get_ancestors($post_id, 'subject', 'post_type');
$post_ancestor = end($ancestors);
if ($post_ancestor != 0) {
echo '<a href="'. get_edit_post_link($post_ancestor). '">'. get_the_title($post_ancestor). '</a>';
} else {
echo '-';
}
}
}, 10, 2);
Видалення колонки
Видалити стовпець із типу публікації досить просто; все, що вам потрібно, це відфільтрувати стовпці публікацій, видалити елемент із масиву та повернути його. Вам не потрібно підключатися до гака виведення стовпця. Наприклад; видалення dateстовпця " " за замовчуванням із типу публікації " post":
add_filter('manage_post_posts_columns', function($columns) {
unset($columns['date']);
return $columns;
});
Зміна назв або позицій стовпців за замовчуванням
Припустімо, що у нас є настроюваний тип публікації «book», і ми хочемо замінити назву стовпця за замовчуванням «Автор» на «Видавець». Ми просто фільтруємо фільтр стовпців і надаємо ключу «author» інше значення:
add_filter('manage_book_posts_columns', function($columns) {
$columns['author'] = __('Publisher', 'textdomain');
return $columns;
});
Перевпорядкування стовпців можна виконати за допомогою функцій масиву PHP. Майте на увазі, що отриманий масив має бути асоціативним масивом зі стовпцем «ID» як ключі та їх міткою як значення. Це простий приклад видалення authorстовпця «» і розміщення його в самому кінці, таким чином змінюючи порядок стовпців:
add_filter('manage_post_posts_columns', function($columns) {
$taken_out = $columns['author'];
unset($columns['author']);
$columns['author'] = $taken_out;
return $columns;
});
Налаштування спеціального стовпця як такого, що можна сортувати
За замовчуванням деякі стовпці WordPress можна сортувати, наприклад, заголовок публікації, кількість коментарів і дата. Можна зробити ваш власний стовпець таким, що можна сортувати, але для цього потрібно трохи більше коду та підключення до перехоплення запиту публікації WordPress, щоб повідомити WordPress, як упорядковувати ваші мета публікації.
Припустімо, що у нас є настроюваний тип публікації " movie", і за допомогою наступного коду ми додаємо настроюваний стовпець, який відображає настроювану мета публікації " duration".
add_filter('manage_movie_posts_columns', function($columns) {
return array_merge($columns, ['duration' => __('Duration', 'textdomain')]);
});
add_action('manage_movie_posts_custom_column', function($column_key, $post_id) {
if ($column_key == 'duration') {
$duration = get_post_meta($post_id, 'duration', true);
echo (!empty($duration))? sprintf(__('%s minutes', 'textdomain'), $duration): __('Unknown', 'textdomain');
}
}, 10, 2);
Щоб повідомити WordPress, що ми хочемо, щоб наш стовпець був сортованим, нам потрібно підключитися до фільтра manage_edit-{$post_type}_sortable_columns. Ми додаємо наш стовпець до масиву стовпців, які можна фільтрувати, а потім визначаємо значення «orderby». Ми встановлюємо там унікальне настроюване значення – те саме ім’я, що й наш стовпець – на яке ми можемо посилатися в нашому запиті пізніше.
add_filter('manage_edit-movie_sortable_columns', function($columns) {
$columns['duration'] = 'duration';
return $columns;
});
Якщо ви оновите WordPress зараз, ви побачите, що наш користувацький стовпець справді доступний для кліків і сортування, але він не сортується належним чином. Це тому, що WordPress не розуміє «duration» як значення «orderby». Це те, що ми виправимо, підключившись до «pre_get_posts»:
add_action('pre_get_posts', function($query) {
if (!is_admin()) {
return;
}
$orderby = $query->get('orderby');
if ($orderby == 'duration') {
$query->set('meta_key', 'duration');
$query->set('orderby', 'meta_value_num');
}
});
Оскільки наш власний мета допису " duration" завжди буде числом, ми можемо визначити " orderby" як " meta_value_num" для порівняння чисел. Налаштуйте аргументи запиту, щоб вони відповідали вашим настроюваним мета-значенням публікації.
Вимкнути сортування для стовпців за замовчуванням
Вимкнути сортування для стовпця за замовчуванням досить просто. Все, що нам потрібно зробити, це підключитися до фільтра manage_edit-{$post_type}_sortable_columnsта видалити з масиву стовпець, який ми не хочемо сортувати. Наприклад, це видаляє сортування для стовпця дати для типу публікації " post".
add_filter('manage_edit-post_sortable_columns', function($columns) {
unset($columns['date']);
return $columns;
});
