Знакомство с WordPress Term Meta и WP_Term

Знакомство с WordPress Term Meta и WP_Term

От автора: в WordPress вы с легкостью можете сохранять метаданные для постов, страниц и других типов пользовательского контента, однако сохранение метаданных для таксономий раньше было слишком сложным процессом.

Раньше чтобы все заработало, необходимо было для каждого элемента данных сохранить метаданные термина как поле в таблице wp_options, и если у вас приличное количество терминов или просто несколько пользовательских таксономий это потенциально могло привести к появлению сотен, если не тысяч записей.

Однако с WordPress 4.4 и выше термины стали объектами, такими же как посты, страницы и пользовательские типы данных. Это изменение сильно упростило процесс добавления, удаления и обновления метаданных.

Предыстория Term Meta

Сообщество искало легкий способ контроля над терминами еще с WordPress 2.8. Процесс был медленный, однако наконец термины были переработаны с нуля для использования классовой структуры. Парочка изменений в WordPress 4.4 означает, что теперь термины в таксономиях (как теги, категории или другие) могут иметь свои собственные мета данные.

Старый способ манипуляции метаданными

До WP 4.4 не было четкого способа сохранения метаданных для терминов, это было неотъемлемое ограничение в самом строении терминов. Если вы расширяли таксономии или термины, вам приходилось сохранять данных напрямую в качестве опции сайта с помощью update_option. Не самый идеальный способ (он забивал таблицу опций).

Я уже писал о расширении таксономий, однако как только вы были готовы сохранить метаданные, вы должны были вызвать функцию наподобие этой:

В примере выше мы запустили функцию из хука create_category (срабатывает при создании нового термина категорий). Функция ищет наши значения и после обработки сохраняет их как опции. Способ рабочий, но не самый красивый.

Как добавить, обновить и удалить Term Meta

Для работы с метаданными терминов вам понадобятся функции add_term_meta, update_term_meta и delete_term_meta. Эти функции в паре с новыми элементами UI позволят вам сохранять и обновлять новые метаданные для терминов.

Как добавить метаданные терминов

Для добавления метаданных в термин нам понадобится функция add_term_meta. Необходимо задать 3 обязательных и 1 необязательный параметр.

$term_id – ID термина, к которому хотите сохранить метаданные

$meta_key – ключевое имя метаданных. Как вы будете обращаться к данным

$meta_value – Сами данные

$unique (необязательный) – Уникальность ключа метаданных. По умолчанию задано false, т.е. если другой ключ имеет такое же название, функцию перепишет его. Чтобы ключи были уникальными, необходимо установить true.

Пример: представьте, что ко всем терминам таксономии category вы хотите прикрепить новые метаданные на основе количества постов, принадлежащих данной категории. В WP 4.4 мы можем пройтись циклом по всем терминам и сохранить новые метаданные (чтобы потом использовать их в теме или плагинах).

Как читать метаданные терминов

С помощью функции get_term_meta мы можем считывать сохраненные метаданные терминов. Функция работает схожим образом с get_post_meta, которая нужна для вытягивания метаданных из постов. Для работы с ней необходимо задать один обязательный и два опциональных параметра.

$term_id –ID термина, из которого будут вытягиваться метаданные

$key (опциональный) – Ключ, который вы хотите вернуть. Если не задан, возвращаются все метаданные.

$single (опциональный) – Если значение одно, будет возвращен ключ или пара значений. По умолчанию значение одно.

Рассмотрим еще один сценарий, где может понадобиться данная функция. Рассмотрим ситуацию, когда у нас уже сохранены метаданные ко всем терминам в таксономии category. В этих данных хранится URL изображения, которое должно отображаться при просмотре терминов. Мы хотим показывать это изображение как баннер под описанием или заголовком термина, но выше списка постов.

Теперь в файле category.php или другом файле шаблона дочерней темы мы можем изменить функционал отображения терминов. В моем примере используется тема Twenty Fourteen, редактировал я файл category.php, а функцию вызываю сразу после описания термина.

Фото отобразится сразу после описания:

Как удалить метаданные терминов

Удалить метаданные терминов можно точно так же, как и для постов. В функции delete_term_meta необходимо задать два обязательных и 1 опциональный параметр.

$term_id –ID термина.

$meta_key – Мета ключ, который следует удалить из термина.

$meta_value (опциональный) – Удаляет метаданные, если значение совпадает переменной. Используйте этот параметр, если необходимо удалить какие-то определенные данные.

И опять же, рассмотрим сценарий, когда это можно использовать. Представьте, что у вас уже наполовину готов крупный проект, и вы уже сохранили различные метаданные во всех терминах категорий. И вдруг какие-то данные вам больше не нужны, т.е. вы можете почистить их, чтобы они не засоряли базу данных.

Функция проходится по всем метаданным и удаляет те, которые не заданы в переменной $allowed_term_keys, тем самым освобождая место в базе данных (полезно, когда у нас остались десятки ненужных записей).

Обратная совместимость с WordPress 4.3 и ниже

Если вы хотите использовать данные функции, но также поддерживать старые версии, можно создать дополнительный функционал, чтобы все стабильно работало.

Начали мы с вызова функции function_exists, чтобы проверить, что новая функция add_term_meta задана. Данная функция работает только в WP 4.4 и выше. Если нужно поддерживать старые версии, используйте обычную функцию add_term_meta для привязки метаданных к нашим терминам.

Если поддержки нет, мы вытягиваем сам объект термина (через его ID), а из него извлекаем $term_taxonomy и используем эту переменную для создания финального ключевого значения. После сохранения данных в таблице опций необходимо проверить ключ на уникальность. Сделать это можно, добавив в одну переменную имя таксономии, ID термина и ключа термина. Необходимо проверить, что ключ не превышает 64 символа. Если превышает, необходимо обрезать. После всего можно вызывать функцию add_option для сохранения.

Как видите, метод немного длиннее, но он более гибкий, так как появляется поддержка старых и новых версий WordPress.

Заключение

Эти новые функции должны расширить возможности и упростить процесс управления терминами, а также добавить уникальный функционал. К примеру, вы захотите добавить изображение сверху от термина или получить метаданные. Тогда вы можете по-разному отображать термины по условию (как загрузка нового файла шаблона на основе отображаемого термина).

Благодаря гибкости и простоте новых функций для работы с метаданными вы можете начать использовать их в своих новых проектах уже сегодня!

Автор: Simon Codrington

Источник: //www.sitepoint.com/

Редакция: Команда webformyself.

Метки:

Похожие статьи:

Комментарии Вконтакте: