Додати додаткові мета-поля, поля та іншу інформацію до WordPress легко, якщо ви знаєте правильні гачки та належні API, яких слід дотримуватися. Але що, якщо ви хочете додати інформацію на сторінку таксономії WordPress?
Наприклад, скажімо, ви хочете створити спеціальну сторінку редагування категорії WordPress або, принаймні, додати певну спеціальну інформацію на сторінку таксономії?
Це все ще можливо зробити, і це все ще відносно легко, але, знову ж таки, вам потрібно знати правильні хуки для використання, і це також залежить від того, чи працюєте ви з вбудованою таксономією чи спеціальною таксономією.
У цьому дописі я покажу, як це зробити за допомогою спеціальної ієрархічної таксономії (або, простіше кажучи, спеціальної категорії).
Спеціальна сторінка редагування категорії WordPress
По-перше, якщо ви вирішите працювати зі стандартною сторінкою категорії, ви, швидше за все, побачите щось на зразок цього:
І два гачки, з якими вам доведеться працювати:
Якщо ви натиснули будь-яке посилання, ви помітите, що останнє не містить жодної інформації, але перше читає:
Дія/хук edit_category_form можна використовувати для виконання додаткових дій на екрані редагування категорії. Наприклад, ви можете додати поля форми, щоб зберегти додаткову інформацію для певної категорії.
З цією метою я зазвичай вирішую використовувати цей гачок, оскільки він чітко визначений у Кодексі. Однак у цій публікації я лише стурбований візуалізаціями інформації, а не додаванням додаткових полів, які потрібно зберегти.
Підключення
У найпростішому вигляді найкращий спосіб почати додавати спеціальну інформацію до цього типу сторінки — це створити функцію та приєднати її до переліку, перерахованого вище. У своїй основній формі це виглядає приблизно так:
<?php
add_action('edit_category_form', 'acme_display_object_ids');
/**
* Displays an ordered list of all of the object IDs for a given
* taxonomy.
*/
function acme_display_object_ids()
{
// Code for displaying the Object IDs goes here.
}
Однак, якщо ви підете об’єктно-орієнтованим шляхом, ви можете вибрати клас, який приймає хук як аргумент у конструкторі та прослуховує цю подію. Якщо це так, то ваш код може виглядати так:
<?php
class ObjectIdSubscriber
{
/**
* @var string the hook to which this class subscribes
*/
private $hook;
/**
* @param string $hook the hook to which this class is registered with WordPress
*/
public function __construct(string $hook)
{
$this->hook = $hook;
}
/**
* Renders all of the information for the object IDs.
*/
public function load()
{
// Code for displaying the Object IDs goes here.
}
}
Незважаючи на це, справа в тому, що вам потрібно мати клас або функцію, підключену до гака, який відображатиме інформацію, коли буде представлено екран.
Відображення інформації
Звідси вам знадобиться щось для візуалізації. Я прихильник тримати свою логіку окремо, тому я зазвичай створюю каталог View, а потім розміщую часткові файли для представлень у цьому каталозі.
Звичайно, ви завжди можете створити рядок HTML у функції PHP (але переконайтеся, що ви дезінфікуєте вихід за допомогою чогось на зразок wp_kses ).
Для цього прикладу я буду простим: я просто хочу витягти список усіх публікацій (або об’єктів, як ви відразу побачите) із бази даних і перерахувати інформацію на сторінці. Для цього мені знадобиться кілька запитів до бази даних, а потім я зможу переглянути список результатів.
По-перше, мені потрібен запит, який буде отримувати term_taxonomy_id із заданої категорії:
<?php
// This will retrieve all of the term relationships from where we can get post IDs.
global $wpdb;
$termTaxonomyId = $wpdb->get_results(
$wpdb->prepare(
"
SELECT DISTINCT term_taxonomy_id
FROM $wpdb->term_taxonomy
WHERE term_id = %s
",
$tagId
),
ARRAY_A
);
$termTaxonomyId = isset($termTaxonomyId[0])? $termTaxonomyId[0]: null;
if (null === $termTaxonomyId) {
return null;
}
Потім мені потрібно отримати список усіх ідентифікаторів об’єктів, пов’язаних цим term_taxonomy_id :
<?php
// This will retrieve all of the post IDs.
$postIds = $wpdb->get_results(
$wpdb->prepare(
"
SELECT object_id
FROM $wpdb->term_relationships
WHERE term_taxonomy_id = %s
",
$termTaxonomyId
),
ARRAY_A
);
if (empty($postIds)) {
return null;
}
Звідси я можу використовувати оригінальну функцію (або клас), яку я створив раніше, щоб відобразити інформацію :
<ul>
<?php foreach ($postIds as $postId): ?>
<li><?php echo $postId; ?></li>
<?php endforeach; ?>
</ul>
Але звідти можна зробити багато додаткових речей.
Є більше
Як зазначалося, це повертає ідентифікатори об’єктів, які, по суті, є ідентифікаторами публікацій (або ідентифікаторами сторінок, ідентифікаторами власних типів публікацій або будь-яким іншим із таблиці wp_posts ).
Отримавши цю інформацію, ви можете отримати будь-яку інформацію, таку як заголовок, вміст, метадані, різну інформацію про дату тощо.
Однак суть публікації полягає не в тому, щоб показати, яку інформацію потрібно отримати, а в тому, як отримати інформацію для даної таксономії, а потім відобразити її на сторінці спеціальної категорії WordPress. І це простий спосіб зробити саме це.
