Многие мои читатели задаются вопросом как создать «кастомные» или «дополнительные» поля WordPress. Для того, чтобы в дальнейшем не возникало подобных вопросов, предлагаю раз и на всегда помочь вам разобраться с вопросом произвольных полей в WordPress.
В WordPress по умолчанию имеется возможность для каждого поста (любого типа, будь то запись post
, страница page
или какой-нибудь произвольный тип постов) задавать неограниченное количество параметров. На этот случай имеется даже отдельная таблица в базе данных wp_postmeta
.
Эти параметры называются произвольными полями или метаданными поста. Метаданные состоят из пар ключ=>значение
, например color=>красный
, size=>большой
.
Также один пост может иметь несколько произвольных полей с одним и тем же ключом: color=>красный
, color=>синий
, color=>зелёный
.
Задавать значения произвольных полей в WordPress можно тремя способами:
- Стандартный способ через админку.
- При помощи функций.
- При помощи метабоксов (перейдите по ссылке, чтобы почитать про этот способ подробнее, в данной статье я его рассматривать не буду).
Произвольные поля в админке
Итак, пошагово:
- Переходим на страницу редактирования или создания нового поста.
- Прокручиваем вниз до блока «Произвольные поля».
В версии WordPress 3.1 и выше этот блок может быть скрыт. Включите его в настройках экрана (о том как — читайте далее). - Укажите имя (вы можете выбрать из списка один из уже используемых ключей либо ввести новый) и его значение и нажмите «Добавить произвольное поле».
Что делать, если в админке их нет?
В первую очередь проверьте «Настройки экрана» — галочка напротив «Произвольные поля» должна быть отмечена.
Если же в настройках экрана вы ничего подобного не нашли, то вероятнее всего тип поста, с которым вы работаете, не поддерживает использование произвольных полей — это легко поправимо при помощи add_post_type_support(). Код для functions.php
:
function true_custom_fields() { add_post_type_support( 'book', 'custom-fields'); // в качестве первого параметра укажите название типа поста } add_action('init', 'true_custom_fields'); |
Типы постов page
(страницы) и post
(записи) имеют поддержку произвольных полей по умолчанию!
Как вывести произвольные поля
1. the_meta()
Функция позволяет вывести все произвольные поля текущего поста в виде маркированного списка <ul>
. Например для нашего случая код:
<p>Метаданные поста:</p> <?php the_meta(); ?> |
Выведет:
<p>Метаданные поста:</p> <ul class="post-meta"> <li><span class="post-meta-key">color:</span> красный, синий, зеленый</li> <li><span class="post-meta-key">size:</span> большой</li> </ul> |
Параметров у функции нет.
2. get_post_meta()
Про get_post_meta()
я уже подробно писал здесь.
3. get_post_custom()
Возвращает многоуровневый массив всех произвольных полей для текущего поста или поста, ID которого указан в параметрах функции.
print_r( get_post_custom( 541 ) ); |
Получим что-то вроде этого:
[color] => Array ( [0] => красный [1] => синий [2] => зеленый ) [size] => Array ( [0] => большой ) ) |
В отличие от функции the_meta()
, get_post_custom()
возвратит также и все скрытые произвольные поля поста.
4. get_post_custom_keys()
Функция возвращает массив ключей всех произвольных полей поста.
print_r( get_post_custom_keys( 541 ) ); |
Выдаст:
Array ( [0] => color [1] => size ) |
Является производной от get_post_custom()
, а если быть точным, то просто пропускает её результат через php-функцию array_keys()
.
5. get_post_custom_values()
Возвращает один из ключей функции get_post_custom()
в виде массива, вне зависимости от количества аргументов.
print_r( get_post_custom_values( 'size', 541 ) ); |
[size] => Array ( [0] => большой ) ) |
Первый параметр функции обязателен (если вы его не укажите, будет возвращено null
).
Как изменять значения произвольных полей
Ну во-первых, вы можете добавлять и изменять их через админку (об этом было написано выше). Во-вторых, для этих целей существует несколько функций.
1. update_post_meta()
Либо обновляет значение указанного произвольного поля, либо добавляет новое, если его не существует.
update_post_meta( $post_id, $meta_key, $meta_value, $prev_value = '' ) |
- $post_id
- (целое число) ID поста, метаданные которого нужно изменить.
- $meta_key
- (строка) ключ.
- Если пост содержит несколько значений для одного и того же ключа, то, если не указан параметр
$prev_value
, будет обновлено первое найденное значение. - Если пост вообще не содержит метаданых с указанным ключом, тогда они будут добавлены.
- Если пост содержит несколько значений для одного и того же ключа, то, если не указан параметр
- $meta_value
- (целое число|строка|массив) устанавливаемое значение.
- $prev_value
- (целое число|строка|массив) предыдущее значение параметра.
Пример:
update_post_meta( 541, 'color', 'белый', 'синий'); |
2. add_post_meta()
Добавляет метаданные для указанного поста.
add_post_meta( 541, 'color', 'желтый' ); // добавляем ещё один цвет к трем имеющимся |
Последний параметр функции позволяет указать, нужно ли добавлять метаданные в том случае, если произвольное поле с указанным ключом уже имеется в базе данных:
-
false
— нужно (стоит по умолчанию), -
true
— не нужно, ключ должен быть уникален.add_post_meta( 541, 'size', 'огромный', true );
Предположим, что наш товар может иметь только один размер, поэтому второе произвольное поле с ключом
size
добавлено не будет.
3. delete_post_meta()
Удаляем метаданные для указанного в параметрах поста.
delete_post_meta( 541, 'color' ); // в параметрах - ID поста и ключ произвольного поля |
На случай, если метаданных с указанным ключом несколько, а нужно удалить только одно, конкретное, в третьем параметре функции можно указать, какое именно значение указанного ключа нужно удалить.
delete_post_meta( 541, 'color', 'зеленый' ); |
Фильтр, поиск и сортировка по произвольным полям
Про это уже написан целый пост, вы можете найти его по этой ссылке.
Произвольные поля для рубрик и меток
Сам по себе WordPress не имеет поддержки метаданных для таксономий (рубрик, меток и пр.), но в этом вам может помочь плагин Meta for taxonomies.
Источник: misha.blog