Руководство разработчика плагинов для WordPress (часть 33)

Управление метаданными записи

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

Добавление метаданных может быть произведено достаточно легко с помощью add_post_meta(). Данная функция принимает флаги post_id, meta_key, meta_value и unique.

meta_key — это то, посредством чего ваш плагин будет ссылаться на метаданные в вашем коде. Нечто вроде mycrazymetakeyname будет работать, однако связанный с вашими плагином или темой префикс и описание вашего ключа будет гораздо полезнее.

wporg_featured_menu может быть хорошим выбором. Следует отметить, что тот же самый meta_key может быть использован множество раз для хранения вариаций метаданных (см. флаг unique ниже).

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

Флаг unique позволяет вам объявлять, является ли данный ключ уникальным. Не уникальный ключ это нечто, что может иметь различные значения, например, цена.

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

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

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

Подобно add_post_meta(), данная функция принимает флаги post_id, meta_key, meta_value и unique.

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

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

Экранирование символов

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

Примем некое JSON-значение {«key»:»value with \»escaped quotes\»»}:

 $escaped_json = '{"key":"value with \"escaped quotes\""}';
 update_post_meta($id, 'escaped_json', $escaped_json);
 $broken = get_post_meta($id, 'escaped_json', true);
 /*
 $broken, after stripslashes(), ends up unparsable:
 {"key":"value with "escaped quotes""}
 */
 

Обходной путь (Workaround)

Путем добавления более чем одного уровня экранирования используя функцию wp_slash() (введена в WordPress 3.6), вы можете компенсировать вызов stripslashes():

 $escaped_json = '{"key":"value with \"escaped quotes\""}';
 update_post_meta($id, 'double_escaped_json', wp_slash($escaped_json));
 $fixed = get_post_meta($id, 'double_escaped_json', true);
 /*
 $fixed, after stripslashes(), ends up as desired:
 {"key":"value with \"escaped quotes\""}
 */
 

Скрытые произвольные поля

Если являетесь разработчиком плагинов или тем и вы планируете использовать произвольные поля для хранения параметров, то очень важно иметь в виду, что 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.

Добавить комментарий