WordPress: управление метаданными поста

· WordPress, Метаданные и Разработка плагинов · 2 мин чтения

В этой посте пойдет речь о том, как управлять метаданными поста в WordPress. Если вы не знаете, что это такое, то чтение этого поста вам многое объяснит.

Добавление метаданных

Для добавление метаданных используйте функцию add_post_meta(). Она принимает три параметра: post_id, meta_keymeta_value и уникальный флаг.

meta_key — это то, как ваш плагин будет обращаться к мета значению в коде. Что-то на подобие moipluginmetakeyname будет являться уникальным, но лучше всего будет если будет префикс вашего плагина и какое-то описанием, чтобы сделать ключ более уникальным. Например, bologer_some_menu будет хорошим вариантом. И, конечно же, вы можете использовать мета ключи в нескольких вариантах используя уникальный флаг (читайте ниже).

meta_value может быть строкой, числом или массивом. Если это массив, тогда оно автоматически сериализуется (конвертируется в формат строки) перед тем как добавляется в базу данных.

Уникальный флаг позволяет вам указать уникальность ключа. Ключ считается не уникальными, если нужно несколько вариантов, например цены.

Если вы хотите использовать лишь одну цену для поста, тогда вам нужно сделать его уникальными и тогда meta_value будет иметь только одно значение.

Обновление метаданных

Если ключ уже существует и вы хотите изменить его, тогда используйте update_post_meta(). Если вы используете эту функцию и ключ НЕ существует, тогда она создаст его, как например это сделает add_post_meta().

Удаление метаданных

Функцию delete_post_meta() принимает post_id — (ID поста), meta_key, и дополнительный, не важный параметр meta_value. Эта функция удаляет мета данные по вводимому запросу.

Очистка данных

Мета значения поста пропускаются через функцию stripslashes() перед тем как сохраниться, поэтому вам нужно быть аккуратным с сохранением таких JSON, который может иметь экранироваться с «\».

Вот пример неправильной работы с JSON: {"key":"value with \"безопасные кавычки\""}:

$escaped_json = '{"key":"значение с \"безопасными кавычками\""}';
update_post_meta($id, 'escaped_json', $escaped_json);
$broken = get_post_meta($id, 'escaped_json', true);
/*
$broken, после stripslashes(), вы не сможете нормально парсить JSON:
{"key":"значение после обработки безопасных кавычек""}
*/

Обход

Вы можете решить проблему выше, добавим дополнительные «\» используя функцию wp_slash() (добавленную в WP 3.6), таким образом вы можете обойти stripslashes():

$escaped_json = '{"key":"значение с \"кавычками\""}';
update_post_meta($id, 'double_escaped_json', wp_slash($escaped_json));
$fixed = get_post_meta($id, 'double_escaped_json', true);
/*
$fixed, после stripslashes(), вы получите нормальный JSON как должно быть:
{"key":"все впорядке, \"кавычки остались как надо\""}
*/

Собственные скрытые поля

Если вы разработчик плагина или темы и планируете использовать собственные поля для хранения параметров, важно знать, что WordPress не покажет поля в meta_key начинающиеся с «_» (нижнее подчеркивание) в списке собственных полей во время изменения поста и когда используете the_meta().

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

Код ниже добавит уникальное, собственное с meta_key —  «_color» и meta_value —  «red» но это поле не будет выводиться на странице изменения поста:

add_post_meta(68, '_color', 'red', true);

Скрытые массивы

В дополнении, если meta_value является массивом, то оно не будет отображаться страницы редактирования, даже если нет нижнего подчеркивания в ключе meta_key.