Год назад задался вопросом, а можно ли отфильтровать посты в WordPress по URL? Указать параметры запроса и получить результат. Мне сказали что можно делать запросы вида:

  • /tag/a+b+c = отбор постов, которые соответствуют всем 3-м меткам
  • /tag/a,b,c = отбор постов, которые соответствуют одной из 3-х меток

Но вопрос был чуть иной, а можно ли делать отбор по нескольким таксономиям, будь то категории или любая другая, или даже по метаполям? Вопрос остался без ответа…

Сегодня разбирались с одним из сайтов, в котором запросы были сделаны криво, через прямые SQL-запросы, минуя API WordPress, с нарушением рекомендаций кодекса.

Изучив еще раз описание функции query_posts (оно же на русском), до меня дошло что все этим параметры мы можем указывать в URL. Лучше поздно, чем никогда 🙂

Мы можем варьировать свой запрос постов как угодно, подставляя параметры в URL.

Рассмотрим на примере этого сайта:

1. Давайте выберем все посты с рубрики jQuery. По slug, из инструкции мы видим что это переменная category_name. Получим URL вида http://casepress.org/kb/web/?category_name=jquery

2. А что если нам нужно получить посты, которые кроме jQuery относятся к рубрике «css»? Получим http://casepress.org/kb/web/?category_name=jquery+css — получаем уже меньшее число постов.

3. А что если нам и этого мало? И мы хотим еще добавить отбор по метке «Формы»? Ну чтобы получить все посты, на тему: jQuery, CSS и Формы? Получаем URL http://casepress.org/kb/web/?category_name=jquery+css&tag=formy — еще меньше записей.

Если в конструкции «category_name=jquery+css» плюс заменить на запятую и сделать «category_name=jquery,css» то результат будет чуть иным. Теперь система отберет посты у которых есть термин jquery или css. В первом случае было условие «и».

Все это прописано в кодексе касательно функции query_posts. Весь фокус в том что почти все этим параметры доступны для передачи в URL.