WordPress get post meta


В данной статье я хотел бы подробно рассказать о такой полезной функции WordPress, как произвольные поля.  С их помощью можно добавить к любой статической странице или посту нестандартные данные, тем самым расширив стандартный функционал WordPress с минимальными усилиями.

Для демонстрации возможностей произвольных полей мы рассмотрим способ создания произвольных Title, Description, Keywords и мета-тега Robots для статических страниц и страниц постов WordPress. Кроме того мы также добавим произвольные поля для страниц категорий Wordpess, но для этого нам понадобится специальный плагин под названием Category Fields.

Итак, используя нижеприведенную информацию, вы без проблем сможете по примеру оптимизировать свой сайт для поисковых систем и значительно расширить его функционал за счет использования произвольных полей. При этом можно будет отказаться от многих громоздких плагинов, таких как, например, All in One SEO Pack, который отвечает за создание произвольных заголовков, описаний и ключевых слов в WordPress.

Создание и использование произвольных полей WordPress


Для того чтобы создать произвольное поле для страницы или поста, переходим в Административную панель WordPress и открываем на редактирование нужную нам страницу. Далее ищем блок «Произвольные поля».

Блок произвольных полей WordPress

Если данного блока на странице редактирования записи вы не нашли, то скорее всего он скрыт. Чтобы включить его отображение, переходим в правый верхний угол экрана и жмем по кнопке «Настройка экрана».

Включение блока произвольных полей WordPress

В выпадающем окне отмечаем чекбокс «Произвольные поля» и приступаем к созданию нового произвольного поля. Для этого заполняем поля «Имя» (латиницей) и «Значение», после чего жмем на кнопку «Добавить произвольное поле».

Создание нового произвольного поля WordPress

После этого можем переходить к выводу данных. Для вывода значений используйте следующий код, который нужно добавить в шаблон сайта WordPress.


Сразу хочу заметить, что функция get_post_meta() может быть использована за пределами цикла WordPress. Таким образом, вы можете использовать ее в любом месте шаблона.

Создание блока произвольных полей WordPress для статических страниц и постов

Теперь давайте рассмотрим процесс создания блока произвольных полей для статических страниц и постов WordPress. В качестве примера мы добавим произвольные Title, Description и Keywords, а также мета-тег Robots.. Данный код нужно будет добавить в файл functions.php вашей темы оформления WordPress.

Как видите, код хорошо прокомментирован, поэтому любой желающий без труда сможет подогнать его под себя, изменив существующие поля или добавив новые. Для этого будет достаточно даже базовых знаний HTML и PHP.

Чтобы вывести содержимое созданных произвольных полей, необходимо в нужном месте шаблона добавить следующий код:

Для вывода заголовка страницы (Title)

Для вывода описания (Description)

Для вывода ключевых слов (Keywords)

Для вывода мета-тега robots

Естественно, чтобы избежать ошибок, мы можем немного усложнить код, добавив в него несколько проверок. Как вариант, можете использовать следующий код, который нужно будет добавить в файл header.php вашей темы оформления между тегами head. При этом старый код, отвечающий за вывод соответствующих данных, вам нужно будет удалить.


Вышеприведенный код позволит вывести содержимое произвольных полей WordPress только в том случае, если соответствующие поля существуют и содержат данные. В противном случае будет использоваться стандартные функции WordPress. Это позволит избежать ошибок в коде и ситуаций, когда данные не выводятся, например, при пустом значении произвольного поля.

dmitriydenisov.com

get_post_meta()

Metadata is handled through the usage of key-value pairs. You can store the name of the metadata in the key part of this pair, and store the information which will appear in the metadata list of the post with which it’s related in value.

To get a post’s metadata we use the WordPress function get_post_meta. It’s syntax goes like below:

 get_post_meta ( int $post_id, string $key = '', bool $single = false ) 

As you see, this function takes three arguments. The first one is $post_id, which is what you will identify the post whose metadata you are looking for with. This parameter is obligatory and must be an integer.

Next up is $key, which is an optional parameter of the format string that represents the meta key to be retrieved. If you don’t specify this, it will return data for all the keys by default. The last parameter is $single


, a boolean value that shows whether a single value is to be returned or not. This parameter is also optional. By default it will take the value FALSE.

Current post’s meta

You can use this function to perform a number of actions on the metadata of the current post, such as, but not limited to, getting the meta for all the keys, for a single key, or even getting the first value of the a key. Take a look at the code below:

 <?php $meta = get_post_meta( get_the_ID() ); ?>  <?php $key_1_value = get_post_meta( get_the_ID(), 'key_1' ); ?>  <?php $key_1_value = get_post_meta( get_the_ID(), 'key_1', true ); ?> 

The first line of code is how we get the meta for all the keys, which is getting the id of a specific post, and not specifying either of the two optional parameters.

Not very differently we get the meta for a single key, only this time we specify the key and leave the rest as it is.

If we only want the first value for this key we specified, we set the last parameter to TRUE and all is well. Easy, right?

Custom Fields Meta

What is done differently if you have added custom fields to your post? Let’s take the example where we have to get a thumbnail’s URL, which is stored in the custom field named thumbnailurl


. The code would go like below:

 <?php if ( get_post_meta( get_the_ID(), 'thumbnailurl', true ) ) : ?>  <a href="<?php the_permalink() ?>" rel="bookmark">  <img class="thumbnailurl"   src="<?php echo esc_url( get_post_meta( get_the_ID(), 'thumbnailurl', true ) ); ?>"   alt=" <?php the_title_attribute(); ?>" />  </a> <?php endif; ?> 

get_post_meta() hacks

No meta field is found

In case you are searching for a given $key in a specific post, and that is not found, then you can get a return value in two forms, depending on what the set value of the parameter $single is. If this parameter is set to FALSE then you will get an empty array, otherwise, you will be given an empty string.

While both may be equally disheartening, the way the return value is presented to you may change how you approach the rest of your code. However, you can add the two lines of code below and keep working the same regardless:

 if( ! get_post_meta( '1', 'non-existing_meta', true ) ) {} if( ! get_post_meta( '1', 'non-existing_meta', false ) ) {} 

Both lines will be run in case we don’t find metadata for a given post.

Meta value is an empty string

If by chance you have stored an empty string into your meta value, then you wouldn’t be able to retrieve this by using get_post_meta


. Instead you can get the correct answer by using get_post_custom_keys(). You can do this like below:

 if( ! in_array( 'given_key', get_post_custom_keys( '1' ) ) ) {} 

This function would correctly find out if the meta has a value that translates to false, such as empty strings or FALSE as a boolean value.

get_metadata()

If you want to get the metadata of a certain object this time, and not a post, then the function you must use is get_metadata(). It’s syntax goes like below:

 get_metadata($meta_type, $object_id, $meta_key, $single) 

Two of this functions’ parameters are obligatory, that being $meta_type and $object_id. The first one is the type of object the metadata is for, therefore it’s format is a string. The other one shows the ID of this object, making it to be an integer.

The other two optional parameters are $meta_key, which shows the $key of the required metadata and retrieves metadata for all keys if left unspecified, and $single which is a boolean value that when set to true return only the first value for the specified metadata.

Download the source code

This was an example of get_post_meta() in WordPress.

Download the source code for this tutorial:

www.webcodegeeks.com

Что это за функция

Функция get posts стала доступна в ядре WordPress еще с версии 1.2.0.

Она предназначена для того, чтобы извлекать списки постов из базы данных, применяя на них пользовательские фильтры для сортировки конечного результата.


По своей сути, эта функция подобна классу wp query, поскольку также возвращает объекты wp post из базы данных. Более того, внутри она использует все тот же класс wp query для построения и исполнения SQL запросов. Однако, в ней задаются несколько другие аргументы, о которых более подробно можно узнать из кодекса WordPress.

date_query-1024x576

Как работает эта функция

Механика работы get posts достаточно проста. Сперва, вы задаете массив аргументов, по которым будет извлечено заданное количество записей из базы данных и их сортировка. При этом, можно отсортировать их по множеству параметров, таких как ID, заголовок, дата публикации, значение meta ключа и т.д. После чего, вы разбираете этот массив на отдельные объекты wp post (иными словами, отдельные записи) и задаете определенные свойства, которые будут отображаться в шаблоне WordPress.

Почему бы не использовать wp_query напрямую


В плагинах рекомендуется применение именно get posts, а не класса wp query, для получения объектов wp post. Так сделано потому, что этот класс изменяет основной цикл, который по умолчанию используется для отображения записей в WordPress. Из-за этого, он может вызвать некоторые проблемы в работе сайта. Кроме того, использование wp query может значительно увеличить время загрузки страницы, так как сценарий будет выполнять в 2 раза больше работы.

wp_query

Примеры использования функции

Чтобы лучше понять механику работы get posts, давайте рассмотрим некоторые примеры ее использования, такие как:

  • Отображение последних статей по ID;
  • Отображение статей в случайном порядке;
  • Отображение статей с определенным произвольным полем.

Эти примеры могут пригодиться вам в собственных проектах, но имейте ввиду, что область применения этой функции не ограничивается только данными способами, она позволяет сделать гораздо больше.

Последние записи

Если вы хотите отобразить определенное число последних постов, находящихся на вашем сайте, то вы можете использовать эту функцию для извлечения объектов wp post и сортировке по ID. Вот пример:


<?php
$args = array ("posts_per_page" => 10, "order" => "DESC", "orderby" => "ID");
$lastarticles = get_posts ($args);
foreach ($lastarticles as $article)
{
echo "<h1>" . $article - > post_title . "</h1><br>";
echo "<p>" . $article - > post_content . "</p><br>";
}
?>

Здесь используется параметр «OrderBy» для сортировки сообщений по убыванию значения их ID (идентификатора). Таким образом, вы получаете 10 самых последних записей, так как каждый новый пост сохраняется в БД под следующим по счету ID.

Случайные записи

Вы также можете легко получить случайные посты. Это полезно, когда вы хотите порекомендовать пользователям другие статьи, находящиеся на вашем сайте, после того, как они закончат прочтение текущей статьи. Вот так будет выглядеть код:

<?php
$args = array ("posts_per_page" => 1, "orderby" => "rand");
$randarticles = get_posts ($args);
foreach ($randarticles as $article)
{
echo "<h1>" . $article -> post_title . "</h1><br>";
echo "<p>" . $article -> post_content . "</p><br>";
}
?>


В данном примере, параметру «OrderBy» передается значение «rand», что означает случайную сортировку объектов wp post.

Записи с определенным значением произвольного поля

Бывают ситуации, в которых нужно получить все посты, имеющие определенный meta ключ с конкретным значением. Например, на некоторых блогах используется имя ревьювера для каждого обзора. Используя следующий код, можно получить объекты wp post, в которых имеется заданный meta ключ:

<?php
$args = array ("posts_per_page" => - 1, "meta_key" => "reviewer", "meta_value" => "victordark");
$metaarticles = get_posts ($args);
foreach ($metaarticles as $article)
{
echo "<h1>" . $article -> post_title . "</h1><br>";
echo "<p>" . $article -> post_content . "</p><br>";
}
?>

Здесь извлекаются все посты ревьювера «victordark». Обратите внимание, что имя ревьювера для каждого поста должно быть сохранено с помощью meta ключа «reviewer». Но вы можете использовать любое другое название для сохранения meta ключа, а потом извлекать его по этому названию.

Заключение

Функция get posts является наиболее часто используемой в WordPress, потому что имеет огромное количество возможностей. Практически каждый плагин так или иначе применяет ее в своей работе. Если вы разрабатываете свой плагин или тему, или просто хотите вывести определенные записи в каком-то месте своего сайта, то вам не обойтись без нее.

Peakmqc5liY

Похожие статьи

wordpresslib.ru

badlywired.com

Как отправить расписание рассылки, используя php без работы cron Имена файлов PHP temp для загружаемых файлов Ошибка IE10 / 11 Ajax XHR – SCRIPT7002: XMLHttpRequest: ошибка сети 0x2ef3 PHP-REGEX: акцентированные буквы соответствуют неактивным, и наоборот. Как достичь этого? Установить файлы cookie в настройках с помощью PHP Преобразование индексированного массива в обычный или простой массив Safari не показывает длительность mp3, поданного с php, правильно Нужна помощь в Regex, подстрока между двумя скобками Я хочу добавить строковые данные до первого символа и после последнего символа Как использовать переменную $ result с объектом таблицы в SQL-запросе с использованием mySQLi Удаление всего, кроме буквенно-цифровых символов из строки в PHP Преобразование формата ISO 8601 в d MY в PHP Вызов статического метода из класса B (который расширяет класс A) класса A загрузить изображение и вставить текст в codeigniter PHP: APC включен, но все еще не работает?

ruphp.com

Я новичок в php и мне был присвоен некоторый код для исправления темы WordPress, но я ничего не могу понять. Код предназначен для домашней страницы пользовательской темы, и предполагается, что он будет вытаскивать последние сообщения в блоге и помещать их в сетку 3×2 в верхней части страницы.

Вот страница, о которой идет речь.

  • Гость Автор — Как я могу использовать пользовательские поля для создания ссылки на автора?
  • Как обернуть все элементы в div внутри сообщения
  • Применять настраиваемые возможности роли для администратора (без плагина)

и вот код из файла index.php (я считаю, что там проблема)

<?php get_header(); ?> <?php global $woo_options; ?> <?php if ( $woo_options['woo_featured_disable'] <> "true" ) include( TEMPLATEPATH . '/includes/featured.php'); ?> <?php $t = array(); $t[2] = "A"; $t[5] = "B"; query_posts('post_type=infobox&order=ASC&posts_per_page=20&meta_value=false'); if (have_posts()) : $a = array(0,1,3,4); $i = 0; while (have_posts()) : the_post(); $m = ""; $m .= "<div class="bskhp_t" style='font-family:arial;font-size:12px'>"; $m .= "<a href="".get_post_meta($post->ID, 'mini_readmore', $single = true).""><img src="".get_post_meta($post->ID, 'mini', $single = true)."" alt="" class="home-icon"></a>"; $m .= "<div class="bskhp_f">"; $m .= "<h3><a href="".get_post_meta($post->ID, 'mini_readmore', $single = true)."">".get_the_title()."</a></h3>"; $m .= "<p>".get_post_meta($post->ID, 'mini_excerpt', true)."</p>"; $m .= "<a style='font-family:arial;font-size:13px;text-transform: uppercase' href="".get_post_meta($post->ID, 'mini_readmore', $single = true)."" class="btn">"; $m .= "<span>Read More</span></a>"; $m .= "</div>"; $m .= "</div>"; $t[$a[$i++]] = $m; endwhile; endif; $t[2] = $t[0]; $t[3] = $t[0]; $t[4] = $t[0]; $t[5] = $t[0]; 

Этот код по какой-то причине не будет тянуть последние сообщения в блоге и помещать их в сетку 3×2, за исключением первых двух элементов, и я понятия не имею, почему. Я считаю, что проблема заключается в функции get_post_meta, но мои знания слишком скудны для ее отладки.

Может ли кто-нибудь помочь? Я был бы очень рад ?

Solutions Collecting From Web of «Проблема WordPress get_post_meta»

www.wordpressask.com

post meta блок пользовательские поля wordpress
По умолчанию, WordPress дает вам возможность создавать два типа содержимого – Посты и Страницы. Посты и страницы можно заполнять контентом в виде статей, записей, заметок и т.п. с помощью визуального редактора в админ-панели WordPress. Этот контент будет отображаться на сайте в виде, заданном темой вашего шаблона. Но используя WordPress для разных типов сайтов, а значит и для разного вида контента, может появиться необходимость привязывать к постам больше информации (дополнительных полей), которая будет идти дополнительно к тексту, и от заголовку поста. Для этого в WordPress существует такая фича, как поле Post meta, известная также как «пользовательские поля», которая как раз и позволяет нам прикреплять дополнительное содержимое к постам. При чем содержимое это может быть чем угодно, в зависимости от типа создаваемого вами сайта. Более того, количество Post meta, которые можно привязать к постам, практически не ограничено.
Итак, в этой статье мы поговорим как раз о том, как можно добавить, отобразить и вообще использовать post meta на своем вордпрессном сайте.
Добавление Post meta из админки WordPress
Рost meta к постам достаточно легко можно прикрепить из админ-панели WordPress, а именно на странице редактирования поста. В том случае, если вы не видите функции post meta (метаблок «пользовательское поле») на странице редактирования постов, её можно включить через настройки экрана, как показано ниже.

Учимся работать с Post Meta полем в WordPress

После такой манипуляции пользовательское поля должно появиться под визуальным редактором поста вот в таком виде:

Учимся работать с Post Meta полем в WordPress

Здесь в выпадающем списке вы увидите все post metа поля, которые ранее прикрепляли к другим постам. Если вы хотите связать с постом одно из ранее созданных полей – просто выберите название нужного вам поля из выпадающего списка. Если же хотите создать новое поле, кликните «Ввести новое» под выпадающим списком и введите желаемое название и значение в соответствующих блоках. Далее кликните «Добавить пользовательское поле» (смотрите скрин ниже).

Учимся работать с Post Meta полем в WordPress

Созданное поле будет связано с постом как только вы сохраните или опубликуете последний.
Использование post meta в вашей теме
Прикрепив роst meta к посту, у вас  может возникнуть необходимость отобразить его с этим постом на вашем сайте. WordPress  предоставляет своим пользователям такую возможность благодаря функции «get_post_meta». Для исполнения функции get_post_meta необходимо задать ряд параметров:

  1. ID поста, поле которого вы хотите отобразить;
  2. Название поля, которое вы хотите отобразить с данным постом;
  3. Булен – по пути «true» значение выбранного post meta отобразится в виде строки, а по пути «false»  – в виде массива, что весьма полезно, когда имеется несколько значений того же post meta в том же посте.

То есть, если, например, вы хотите отобразить в своем посте post meta под названием «Цена», который мы только что создали, вам необходимо добавить следующие строки в код своей темы (куда — зависит от того, в каком именно месте вам нужно показать значение данного post meta):

После добавления вышеуказанных строк кода, получаем отображение нашего post meta в цикле вот в таком виде:

Учимся работать с Post Meta полем в WordPress

Добавление post_meta через PHP код
Как вам уже известно, рost meta могут быть обновлены или добавлены через админ-панель WordPress. Но может быть, вы хотите, чтобы это можно было сделать программно?  Если да, то WordPress как раз дает вам такую возможность, благодаря функции под названием «update_post_meta».
Функция «update_post_meta» использует четыре параметра:

  1. ID поста;
  2. Название необходимого post meta;
  3. Значение этого же post meta;
  4. Дополнительный параметр: предыдущее значение, которое вы хотите обновить.

Функция update_post_meta будет называться «add_post_meta», если используемый для обновления post meta не был создан заранее.
Теперь рассмотрим все это на небольшом примере. Мы сделаем так, что к постам (когда бы они ни были сохранены) в которых post meta под названием «Цена» имеет значение более 400$ будет добавляться скидка, например, в 15%.
Для этого пишем следующий код:

К данной функции мы прикрепили save_post, которая вызывается независимо от того, когда был сохранен пост.  Итак, согласно приведенному коду, анализируется значение post meta «Цена». Если оно больше 400$, вызывается функция update_post_meta, которая обновляет значение со скидкой. То есть теперь, если мы добавим пост с «Ценой» более 400$ к нему будет автоматически добавляться скидка в 15%, как показано ниже:

 

Еще несколько полезных функций, связанных с пользовательскими полями
Ниже приведены еще кое-какие полезные функции, которые вы можете использовать относительно к post meta.

  • get_post_custom_keys – эта функция берет ID поста и отображает массивом все post meta поля, связанные с этим постом.
  • get_post_custom_values – эта функция используется для того, чтобы получить все значения для конкретного поста. Это полезно только тогда, когда пользовательское поле имеет не уникальные значения.
  • get_post_custom – эта функция использует  ID поста как входные данные и возвращает массив с всеми названиями post meta и их значениями в конкретном посте.
  • delete_post_meta –  в этой функции задается ID поста и имя post meta, которые вы хотите удалить.

Post meta в пользовательских типах записи
Мы уже успели убедиться в том, что post meta – довольно таки полезная фича. Она также может быть скомбинирована с функцией WordPress-а под названием пользовательский тип записи, что в результате, дает возможность создавать широкий спектр различных сайтов на WordPress.
Чтобы связать post meta и custom post type, необходимо добавить несколько пользовательских полей к дополнительным параметрам функции register_post_type, как показано ниже:

Подытожим
WordPress всегда была очень гибкой системой, которая используется для создания не только банальных блогов, но и намного более сложных сайтов. Благодаря функциям типа post meta, WordPress  значительно расширяет площадку для постройки сайтов: от обычного списка продукции до профессионального портфолио.
Спектр возможностей пользовательских полей в WordPress расширяется также и за счет дополнительных функций к ней, которые, в отличии от множества других, довольно простые в использовании, хотя и имеют сложнейшую подоплеку. Так что, желаю вам приучиться и  с удовольствием использовать эти знания при построении своих будущих сайтов.

variable.pp.ua


You May Also Like

About the Author: admind

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.