WordPress LogoЯ сейчас «рисую» новый, более навороченный и умный WordPress плагин, для работы с GameBoss партнеркой — «GameBoss Partner». И в перспективе собираюсь частично использовать его код и для партнерки от Алавара. По ходу дела возникают всякие проблемки и проблемы. А когда ты сталкиваешься с проблемой то проще всего, а часто еще и умнее всего, задействовать свою лень в созидательных целях. Нуте-с, начинаем ленится созидающе ;)

Как рядовой представитель IT-нечисти я не люблю работу вообще, а тупую работу особенно. И именно поэтому, когда мне понадобилось хранить кое-какие данные для своего нового WordPress плагина я не стал создавать отдельную таблицу, и в сотый раз писать\отлаживать код для создания\чтения\изменения записей. Я использовал такую прикольную wp-фишку как метаполя.

К каждой записи в WordPress можно добавить сколько угодно именованных полей содержащих текстовые данные (в php все текст, или может быть представлено как текст). Вот эти-то поля и называются «метаполями», или же «произвольными полями». Подробнее здесь и здесь.

Метаполя можно добавить вручную, когда редактируешь запись, или с помощью sql если вносишь записи автоматом. Но sql, это как раз то от чего я и хотел уйти. Значится что? Правильно RTFM.

Идем читать WordPress codex, понимаем что именно скрывается за буквой F(ucking), лезем в мой любимый WordPress форум и в конце-коцов оказываемся именно там, откуда и следовало начинать наши поиски: в исходниках WordPress, модуль /wp-includes/post.php

Для работы с матаполями были обнаружены следующие функции, с вполне говорящими именами и параметрами:

function add_post_meta($post_id, $key, $value, $unique = false)
Добавить к записи метаданные. Где $post_id - ID записи, $key - имя метаполя а $value - значение метаполя. Переменная $unique установленная в true заставит функцию завершится с ошибкой если такое поле уже есть.

function delete_post_meta($post_id, $key, $value = ”)
Удалить из записи $post_id метаполе $key.
Если задано значение для $value, то поле будет удалено только если его значение совпадает со значением $value.

function get_post_meta($post_id, $key, $single = false)
Получить значение метаполя $key, для записи $post_id в виде масива. Если $single = true, то в виде переменной.

function update_post_meta($post_id, $key, $value, $prev_value = ”)
Записать для поста $post_id в метаполе $key значение $value. Если $prev_value содержит значение, то обновление будет успешным только в случае совпадения $prev_value и значения метаполя в базе.

function delete_post_meta_by_key($post_meta_key)
Удалить метаполя с именем $post_meta_key для всех записей.

function get_post_custom($post_id = 0)
Возвращает массив метаполей связанные с записью $post_id, либо с текущей, если $post_id=0.

function get_post_custom_keys( $post_id = 0 )
Возвращает массив имен метаполей связанные с записью $post_id, либо с текущей, если $post_id=0.

function get_post_custom_values( $key = ”, $post_id = 0 )
Возвращает массив значений метаполя $key связанный с записью $post_id, либо с текущей, если $post_id=0.

Перед использованием хотябы один раз стоит заглянуть в код, например что-бы увидеть что когда получаешь данные поста, автоматом выбираются и связанные с ним метаданные. То есть использование метаполей очень часто оказывается «бесплатно». Ну или для того чтобы не чесать репку получая из get_post_meta() массив, хотя ты точно уверен что писал в базу скаляр. И конечно же для того чтобы уверится - ленится было замечательной идеей!

Последняя мысль, которая как считает Штирлиц, лучше всего запоминается:
Ленитесь же, други моя, и воздастся вам по недеянию вашему!