WordPress 3.1: Использование query_posts для поиска по категориям с помощью И

У меня есть сообщения, которые разбиты по категориям, и в настоящее время я могу использовать функцию query_posts() для выполнения ИЛИ поиска сообщений на основе их категории, например, я могу получить все сообщения категории 1 ИЛИ 2, вызвав query_posts('cat=1,2&orderby=date&showposts=5');

Однако я хотел бы выполнить поиск И, поэтому вместо этого просто получаю сообщения, которые относятся к категории 1 И 2.

Может ли кто-нибудь сказать мне, как это сделать, пожалуйста? В документации WordPress упоминается передача массива category__and идентификаторов категорий, однако это не работает в версии 3.1. Может быть, мне нужно использовать собственный запрос SELECT или у WordPress есть удобный способ сделать это?

Спасибо.


person GSA    schedule 29.03.2011    source источник


Ответы (1)


См. документацию query_posts.

query_posts( array( 'category__and' => array(1,3), 'posts_per_page' => 2, 'orderby' => 'title', 'order' => 'DESC' ) );

(эта комбинация вернет сообщения, принадлежащие как к категории 1, так и к категории 3, показывая только два (2) сообщения в порядке убывания по заголовку)

person Poelinca Dorin    schedule 29.03.2011
comment
Спасибо - я попробовал еще раз, и да, похоже, это работает! Я пробовал это раньше, когда задавал вопрос, однако я тестировал его с несуществующей категорией, например. (1,1000), чтобы увидеть, возвращал ли он 0 сообщений, а не возвращал — он продолжал возвращать некоторые. Поэтому я подумал, что это больше не поддерживается, поскольку сообщение не может быть в категории 1000. Но я попробовал еще раз с некоторыми реальными идентификаторами категорий, и, похоже, они правильно ограничивают их - отлично - person GSA; 29.03.2011
comment
вы можете немного отладить и посмотреть, какие запросы на самом деле выполняются, возможно, он проверяет, есть ли какие-либо сообщения в 1 и 1000, и если он не находит их, он возвращается из 1 ИЛИ, возможно, это ошибка, и вы должны сообщить об этом, но мы не можем сказать наверняка, если кто-то не проведет некоторые тесты. - person Poelinca Dorin; 29.03.2011