Описание
Возвращает значение(я) определенного произвольного поля, указанного поста.
Для того чтобы получить значение всех произвольных полей определенного поста, смотрите функцию get_post_custom().
get_post_meta() используется в: get_post_thumbnail_id().
get_post_meta() работает на базе get_metadata().
Использование
<?php $meta_values = get_post_meta($post_id, $key, $single); ?>
Параметры
- $post_id (число) (обязательный)
- ID поста, произвольные поля которого нужно получить.
По умолчанию: нет - $key (строка) (обязательный)
- Название произвольного поля, заначение которого нужно получить.
По умолчанию: нет - $single (логический)
- Если выставить параметр в ture, то функция вернет единственное значение в виде строки. Если параметр будет равен false или не будет установлен, то функция вернет массив значений произвольных полей.
Однако, если в значении произвольного поля находится серриализованный массив, то занчение true вернет, нормальный массив, а если указать false, то вернется массив в элементе (например [0]) которого будет все тот же серриализованный массив. Т.е. в этом случае параметр работает "наоборот".
По умолчанию: false
Примеры
1. Получим массив значений произвольных полей поста 76, ключ которых равен key_1, подразумевается что у поста не одно произвольное поле с ключом key_1:
<?php $key_1_values = get_post_meta(76, 'key_1'); ?>
2. Чтобы получить только первое (или единственное) значение произвольного поля в виде строки, используем такой вызов функции:
<?php $key_1_value = get_post_meta(76, 'key_1', true); ?>
3. Простой пример использования get_post_meta внутри Цикла WordPress. Этот код пример того, как использовать функцию для того, чтобы получить значение произвольного поля thumb, в значении которого сохраняется ссылка на картинку-миниатюру, для того чтобы получить эту ссылку и использовать её в шаблоне.
<?php if ( get_post_meta($post->ID, 'thumb', true) ) : ?>
<a href="<?php the_permalink() ?>" rel="bookmark">
<img class="thumb" src="<?php echo get_post_meta($post->ID, 'thumb', true) ?>" alt="<?php the_title(); ?>" />
</a>
<?php endif; ?>
Использования функций произвольных полей на примере авторской функции
<?php
/*******************
Эта функция обрабатывает два мета тега (произвольных поля): mood и listening_to.
Она может быть вызвана тремя разными вариантами (действиями): update, delete и get (по умолчанию).
Когда функция работает как update (обновление), оба параметра $mood и $listening_to должны быть указаны.
Пример вызова: mood_music( $post->ID, 'update', 'Happy', 'Bon Jovi - It's My Life' );
*******************/
function mood_music( $post_id, $action="get", $mood = 0, $listening_to = 0 ) {
// Проверка (switch) какое из действий нужно выполнять update, delete или get
switch ($action) {
case "update" :
if( ! $mood && ! $listening_to )
//Если не переданы данные для обновления, останавливаемся
return false;
//Использование функции add_post_meta():
//add_post_meta( $post_id, $meta_key, $meta_value, $unique = false )
//Если передана переменная $mood, создаем произвольное
//поле 'mood', со значением этой переменной.
//Если такое произвольное поле уже существует,
//то эта команда создаст еще одну мета запись
if( $mood ) {
add_post_meta( $post_id, "mood", $mood );
return true;
}
//Использование функции update_post_meta():
//update_post_meta( $post_id, $meta_key, $meta_value )
//Если передана переменная $listening_to, создаем произвольное
//поле 'listening_to', со значением этой переменной.
//Если такое произвольное поле уже существует, то эта команда
//обновит его данные на новое значение переданное в переменной $listening_to.
if( $listening_to ) {
add_post_meta( $post_id, "listening_to", $listening_to, true ) or
update_post_meta( $post_id, "listening_to", $listening_to );
return true;
}
case "delete" :
//Использование функции delete_post_meta:
//delete_post_meta( $post_id, $meta_key, $prev_value = "" )
//Удаляем все произвольные поля с ключами mood и listening_to у указанного поста.
delete_post_meta( $post_id, "mood" );
delete_post_meta( $post_id, "listening_to" );
//Если нужно удалить только поле 'mood' со значением "sad", используем такой код:
//delete_post_meta( $post_id, 'mood', 'sad' );
break;
case "get" :
//Использование функции get_post_custom():
//get_post_meta( $post_id, $meta_key, $single value = false )
//$stored_moods будет массивом содержащим все значения произвольных полей с ключом 'mood'
$stored_moods = get_post_meta( $post_id, "mood" );
//$stored_listening_to будет значением первого произвольного поля 'listening_to'
//(подразумевается, что таких полей несколько)
$stored_listening_to = get_post_meta( $post_id, "listening_to", true );
//Теперь нам нужно вывести на экран настроение (mood), для этого
//мы должны вызвать эту функцию в шаблоне так:
//пример: echo mood_music( $post->ID, 'get' );
$return = "<div class=\"mood-music\">";
if ( ! empty( $stored_moods ) )
$return .= "<strong>Мое Настроение</strong>: ";
foreach( $stored_moods as $mood )
$return .= $mood . ", ";
$return .= "<br/>";
if ( ! empty( $stored_listening_to ) ) {
$return .= "<strong>Сейчас я слушаю</strong>: ";
$return .= $stored_listening_to;
}
$return .= "</div>";
return $return;
default :
return false;
break;
} //Конец проверки switch
} //Конец функции
?>
get_post_meta()
из файла: /wp-includes/post.php WP 3.3.2function get_post_meta($post_id, $key, $single = false) {
return get_metadata('post', $post_id, $key, $single);
}Связанные Функции
Ещё из раздела
Смотрите также: Функции WordPress и Теги Шаблона.
Такой вопросик: можно ли заставить вордпресс обрабатывать вставленные в произвольное поле шорткоды? К сожалению, он по умолчанию просто вываливает их как текст. Это навсегда или можно доработать?
Можно, но это индивидуальный подход... Как-то универсально, как это сделано с контентом такое сделать, наверное, не получится. Потому что произвольные поля выводятся по-разному и используются для самых разных целей.
Опишите конкретную задачу возможно смогу помочь. В любом случае вам придется разобраться с плагином, в частности, тем какая именно функция выполняется для шоткода.
Я согласна на индивидуальный, главное - чтобы я смогла осилить.
Задача в том, чтобы на странице меток выводить не пост, а его анонс из произвольного поля, причём только при условии, что анонс вообще есть. Если анонса нет, то выводится, как и на страницах рубрик, кусок поста до тега more. (Поэтому использовать the_excerpt не вышло - не срабатывает проверка на "есть-нет".)
Шорткоды я использую, чтобы вставлять видео с ютьюба и блок картинки с сопровождающим текстом. Шорткоды мной прописаны собственноручно в function.php. Например, для видео формат такой: [movie w="ширина" h="высота"]урл[/movie]. На выходе - встроенный видеоролик.
Разумеется, если задача окажется неподъёмной, то в запасе обходной путь: писать пост так, чтобы не требовалось выводить видео через то поле. Но если задача решаема, то мой опыт явно станет ширше и полезнее.
Сдаётся мне, что задача решается применением к тексту поля тех же фильтров, что и к основному посту:
$custom_content = apply_filters('the_content', $custom_field_content);
А где их приложить? То есть, буквально: в какой файл лезть?
Попробовала приложить этот фильтр в том месте, где должно выводиться значение - ничего не изменилось. Как шорткод вываливался набором тегов, так и вываливается. Обработки не происходит.
Помогите плиз решить задачу. Думаю, будет интересно многим:
Есть в файле сингл такой блок:
Статью опубликовано в рубрике
По умолчанию выводится ссылка на рубрику, в которой прикреплена статья и с тем названием (ключем), как ее назвали.
Я же продвигаю рубрики по разным ключам и хотелось бы этот блок для перелинковки тоже с толком использовать. Как можно код прописать, чтобы задействовать произвольное поле?
Статью опубликовано в рубрике
Т.е. нужно мне прописать в поле ссылку не "новости города", а "городские новости", а когда не нужно нового ключа (например, хватит уже перелинковывать вручную) - чтобы выводилось автоматом то, как она и названа?
Хочется произвольным полем. Предполагаю, например, чтобы назвать поле "pole" и в коде прописать
ID, "pole", true); ?>
НО как это соединить с пердыдущим кодом, чтобы если этот код не используется в статье (осталось поле "значение" пустым), то срабатывал первый код и выводилась ссылка по умолчанию?
Здравствуйте, Тимур. Спасибо за отличный сайт! Все очень качественно сделано. Частенько сюда захожу. Небольшая опечатка в этом посте "Если выставить параметр в ture, то функция вернет единственное значение в виде строки".
ture - true.
Привет всем.
Помогите получить посты из wp_usermeta. Нужно в конце поста (single.php) вывести последних 5 постов автора этого поста. Есть разные готовые решения но! ниодно неработает. В таблице вп_узермета есть мета_кей user_posts где мета_валуе a:2:{i:0;s:4:"2113";i:1;s:4:"2112";} 2112,2113 id постов автора. Может знает кто, где есть инфа по этой белиберде?
При помощи стандартной функции get_posts() это можно сделать.