Запрос пользовательского типа записи на основе ID записи и значения произвольного поля
Возможно, ответ уже где-то есть, но мне не удалось его найти или распознать. Вот ситуация:
У меня есть пользовательский тип записи 'region', который отображается на single-region.php. Названия регионов: Север, Юг, Восток, Запад.
Есть другой пользовательский тип записи 'news'. С ним связано произвольное поле 'news_region'. При создании новости автор должен указать значение для news_region (All, N, S, E, W).
Я хочу, чтобы на странице региона "Север" отображались все новости со значением news_region "All" ИЛИ "N".
ФИНАЛЬНАЯ РАБОЧАЯ ВЕРСИЯ (спасибо @milo за правильное направление):
// получаем заголовок страницы региона для сравнения с ключом news_region
$this_region = get_the_title($post->ID);
// запрашиваем новости с news_region All или $this_region
$args = array(
'post_type' => 'news',
'posts_per_page' => 4,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'news_region',
'value' => 'All',
'compare' => 'LIKE'
),
array(
'key' => 'news_region',
'value' => $this_region,
'compare' => 'LIKE'
)
)
);
$newslist = new WP_Query( $args );
ПРИМЕЧАНИЕ: изменил значения news_region на 'All, North Region, East Region, South Region, West Region' для соответствия полным названиям регионов (таким же как заголовок записи на single-region.php).

Если я правильно вас понял, вам нужен news_region
meta_query
с оператором сравнения IN
для значения All
или первой буквы названия текущего регионального поста (N
, S
, E
, W
)
// получаем первую букву названия этого регионального поста
$this_region = substr($post->post_title, 0, 1);
// запрашиваем новости с news_region All или $this_region
$args = array(
'post_type' => 'news',
'meta_query' => array(
array(
'key' => 'news_region',
'value' => array( 'All', $this_region ),
'compare' => 'IN'
)
)
);
$news_posts = new WP_Query( $args );

Нет. Не пытаюсь сравнивать первые буквы. Пытаюсь показывать новостные материалы с прикреплённым пользовательским полем 'SE' (могут быть и другие регионы позже) на странице региона Southeast Region, и новостные материалы с пользовательским полем 'SW' на странице Southwest Region. Вижу подсказку о том, как заставить ваш код работать с пользовательскими полями, назначенными новостным материалам. Попробую и вернусь с результатами. Спасибо.

Я изменил значения пользовательских полей с инициалов на полные названия регионов. Затем подумал, что смогу сравнивать их с названиями регионов на страницах регионов (North Region - это и заголовок поста страницы региона, и значение пользовательского поля news_region). Однако столкнулся с трудностями. Моя модификация вашего кода, похоже, не захватывает заголовок типа поста региона для сравнения. Добавлю код к своему первоначальному вопросу.

Ответ @Milo верен, если вы хотите решить проблему с предлагаемым вами решением, но я думаю, что преобразование "Регионов" в таксономию имеет гораздо больше смысла. (Для небольшого контекста прочитайте о Проблеме XY.) Это связано с тем, что поведение вашего типа записи "Регион" в точности соответствует поведению стандартной архивной страницы таксономии. Таксономии также предоставляют более удобный интерфейс.
Кроме того, термины таксономий по умолчанию имеют поле описания. Хотя оно не включено в каждой теме, довольно легко добавить его в шаблон taxonomy-region.php (при условии, что вы создадите таксономию с именем region).
Наконец, поле описания термина по умолчанию является простым текстом, но плагин Rich Text Tags добавляет удобный WYSIWYG редактор, чтобы решить эту проблему.
