
На этом сайте вам встретится множество примеров кода, так или иначе относящихся к post meta, или «пользовательским полям». Несомненно, вы видели фрагменты с вызовом функций типа get_post_meta( $post_id, $meta_key, true ) или update_post_meta( $post_id, $meta_key, $new_value), но, возможно, это не привело вас к понимаю того, как работает WordPress в этих случаях.
Скорее всего, вы также слышали, что у WordPress есть что-то, что называют «пользовательские поля». На сайте WordPress Codex в отношении этих полей говорится следующее: «Эта произвольным образом выбранная дополнительная информация называется мета-данными». Таким образом, как вы, возможно, догадались, пользовательские поля, post meta, и мета-данные в WordPress означают одно и то же. Эта дополнительная информация сохраняется в объекте поста в WordPress и связывается с ID поста.
Post Meta работает одинаково для всех объектов поста в WordPress. Это означает, что мы можем хранить и использовать эту функцию для страниц или пользовательских типов записей точно так же, как и для настоящих постов.
Какие же типы информации мы можем или должны хранить в качестве пользовательских полей? Короткий ответ: практически какие угодно. В кодексе WordPress используются следующие примеры:
Настроение: Счастливый
Текущее чтение: Золушка
Музыка: Rock Around the Clock
Погода: Жарко и сыро
Можно хранить и такую информацию:
Фоновый цвет записи: #FF0000
Подзаголовок: Подзаголовок для моей записи
Показывать ссылки на социальные ресурсы?: да
Типы информации, которую вы можете хранить таким образом, практически безграничны. Тем не менее, если вы планируете хранить информацию с разбивкой по категориям и не хотите использовать встроенные Категории или Метки, возможно, вам стоит отказаться от пользовательских полей и добавить вместо этого собственную настраиваемую классификацию.
Если вы добавите (временно) следующий фрагмент кода в ваш файл functions.php, вы сможете увидеть ВСЕ пользовательские мета-данные, ассоциированные с конкретной записью, со страницы редактора записей.
1 2 3 4 5 6 7 8 9 10 11 12 |
add_action( 'all_admin_notices', 'wpsnipp_show_all_custom_fields' ); function wpsnipp_show_all_custom_fields() { if ( isset( $_GET['post'] ) ) { $post_id = absint( $_GET['post'] ); ?> <div id="message" class="updated"> <h3>All post meta:</h3> <xmp><?php print_r( get_post_meta( $post_id ) ); ?></xmp> </div> <?php } } |
Это действие – удачный способ проверить, сохранилось ли ваше пользовательское поле правильно, или – существует ли оно. Теперь я покажу вам, что дает этот код на выходе, — смотрите скриншот.
- Это пользовательское поле ‘ключ’. Оно является идентификатором для части (или нескольких частей, — мы вернемся к этому позже) информации. С этого момента я буду ссылаться на него как на $meta_key. Вы будете использовать этот $meta_key в различных функциях:
- get_post_meta( $post_id, $meta_key, true ). На фрагменте сверху мы использовали get_post_meta только с одним параметром $post_id, но в общем случае вам понадобится передавать также параметры $meta_key и $single. Я объясню поподробнее в п.3
- update_post_meta( $post_id, $meta_key, $new_value )
- add_post_meta( $post_id, $meta_key, $meta_value, $unique )
- Нижнее подчеркивание в начале этих двух метаключей говорит WordPress, что они скрыты, т.е. что они не появятся в стандартном редакторе пользовательских полей. Два примера на скриншоте выше – это два поля с метаданными, которые WordPress хранит для фичи Ревизии.
- Это строка для значения поля, которое вы проверяете
- Сейчас вы видите значение только с одним рядом, но существует возможность добавить несколько рядов значений с помощью функции add_post_meta. Это редко используется, но может быть достаточно удобной вещью для сложных запросов, что находится за пределами темы данной статьи. Используя функцию get_post_meta, вы должны прописать третьему параметру значение «true», чтобы получить единичное значение. В нашем примере это «Пример пользовательского поля[F1] ». Если вы этого не сделаете, WordPress выдаст вам по умолчанию все строки в массиве, и вам придется самостоятельно отделять значения, которые вам нужны. Еще раз, это крайне редкий случай, когда вам потребуется опустить (или задать значение «false») этому третьему параметру.
ОК! В этой статье мы достаточно тщательно разобрали функцию get_post_meta. В следующей статье мы продолжим тему пользовательских полей, рассмотрев подробно функции update_post_meta и add_post_meta. Если какие-то места вам все еще кажутся не совсем понятными, не стесняйтесь оставить комментарий об этом!
* Существует множество плагинов и библиотек, позволяющих создать пользовательские поля и метабоксы. Один из примеров – это Advanced Custom Fields, а пример библиотеки — Custom Metaboxes and Fields.
Это первая статья из серии в 5 статей.
[F1]‘sample field value’ заменить в коде на «Пример пользовательского поля», или наоборот