WP_Query: заказывать сообщения, используя meta_key, затем просто по дате - PullRequest
0 голосов
/ 17 марта 2020

Я пытался решить это часами, и я немного застрял ...

По сути, все, что я хочу сделать, - это иметь возможность "поднять" выбранную должность, в то время как в противном случае заказываю обычно по дате статьи. Что-то вроде функциональных возможностей WP. На веб-сайте есть несколько разных категорий страниц, и я использовал ACF для создания настраиваемого поля под названием «Поднять пост», которое представляет собой радиогруппу с опциями «Да» (возвращает 1) и «Нет» (возвращает 0).

Мне удалось заставить это работать в WP_Query, используя следующее:

$news = new WP_query(array(
	'cat' => 4,
	'post_type' => 'post',
	'posts_per_page' => '3',
	'meta_query' => array(
		array(
			'key' => 'elevate_post',
			'compare' => 'EXISTS',
		),
	),
	'orderby' => array( 'meta_value' => 'elevate_post', 'date' => 'DESC' ),

)); 

Категория с идентификатором '4' является категорией верхнего уровня. Когда я пытаюсь сделать то же самое в другом WP_Query, показывая вместо этого дочернюю категорию, я получаю только сообщения с помеченным полем «Поднять пост» «да». Я не могу на всю жизнь понять, почему это не сработает. Идентификатор категории буквально единственная разница. Когда я использую '4' (категория верхнего уровня, которая работает) в проблемном запросе c, чтобы проверить это, он работает нормально, поэтому я уверен, что здесь нет опечаток или каких-либо глупостей.

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

ОБНОВЛЕНИЕ

Итак, после небольшого прочтения, я полагаю, что приведенный выше запрос получает только сообщения с мета-значением ЛЮБОЕ elevate_post и исключает все остальные сообщения. Я ошибочно подумал, что первый запрос сработал, потому что я возился с первыми тремя в этой категории настолько, что у всех был один ... Это делает мой вопрос немного проще. Можно ли иметь один запрос, который включает посты с мета-запросом 'elevate_posts', а также все остальные посты, и упорядочить их так, чтобы посты с 'elevate_posts', равными '1', были перечислены первыми, а остальные упорядочены по Дата РГ?

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

...