Год назад задался вопросом, а можно ли отфильтровать посты в WordPress по URL? Указать параметры запроса и получить результат. Мне сказали что можно делать запросы вида:
- /tag/a+b+c = отбор постов, которые соответствуют всем 3-м меткам
- /tag/a,b,c = отбор постов, которые соответствуют одной из 3-х меток
Но вопрос был чуть иной, а можно ли делать отбор по нескольким таксономиям, будь то категории или любая другая, или даже по метаполям? Вопрос остался без ответа…
Сегодня разбирались с одним из сайтов, в котором запросы были сделаны криво, через прямые SQL-запросы, минуя API WordPress, с нарушением рекомендаций кодекса.
Изучив еще раз описание функции query_posts (оно же на русском), до меня дошло что все этим параметры мы можем указывать в URL. Лучше поздно, чем никогда 🙂
Мы можем варьировать свой запрос постов как угодно, подставляя параметры в URL.
Рассмотрим на примере этого сайта:
1. Давайте выберем все посты с рубрики Новости. По slug, из инструкции мы видим что это переменная category_name. Получим URL вида https://wpcraft.ru/category/novosti
2. А что если нам нужно получить посты, которые кроме Новости относятся к рубрике «Плагины»? Получим https://wpcraft.ru/category/novosti+plaginyi-wordpress/ — получаем уже меньшее число постов.
3. А что если нам и этого мало? И мы хотим еще добавить отбор по метке «Формы»? Ну чтобы получить все посты, на тему: Как сделать? и метка WooCommerce? Получаем URL https://wpcraft.ru/category/kak-sdelat/?tag=woocommerce — еще меньше записей.
Если в конструкции https://wpcraft.ru/category/novosti+plaginyi-wordpress/ плюс заменить на запятую и сделать https://wpcraft.ru/category/novosti,plaginyi-wordpress/ то результат будет чуть иным. Теперь система отберет посты у которых есть термин novosti или plaginyi-wordpress. В первом случае было условие «и».
Все это прописано в кодексе касательно функции query_posts. Весь фокус в том что почти все этим параметры доступны для передачи в URL.