Как перехватить основной запрос и ввести пользовательские соединения / порядок по / группе по критериям

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

mysite.com/tax1/term1/

tax2-term1 -post -post -post [подробнее]

tax2-term2 -post -post -post [подробнее]

… и т.д.

Лучший пример

Чтобы обеспечить более удобный пример, рассмотрите следующий CPT: Toys. И две таксономии: цветная и возрастная группа.

На странице архива таксономии для mysite.com/colour/red мне необходимо дополнительно группировать вторую таксономию «возрастная группа» следующим образом:

Красные игрушки

Возраст: 0 – 12 месяцев -toy -toy -toy [смотреть больше Красные игрушки в возрасте от 0 до 12 месяцев]

Возраст: 12-24 месяца -toy -toy -toy [смотреть больше Красные игрушки в возрасте от 12 до 24 месяцев]

и т.д…

Перехват query_posts

Итак, если я не ошибаюсь, и у нас вдруг появилась возможность сортировать по таксономии (группировка была бы идеальной, но я мог бы обойти это), я думаю, что пользовательский SQL-запрос с моими собственными налоговыми объединениями будет лучший способ получить то, что мне нужно. Поправьте меня если я ошибаюсь. Большую часть времени я хочу идти по встроенному WP, я просто не вижу, что здесь работает.

Как бы вы захватили основной запрос, чтобы по-прежнему использовать The_Loop (TM), но с пользовательским SQL? Или вы найдете способ вернуть пустой запрос, а затем просто свернуть свой собственный SQL-цикл?

Прямо сейчас я склоняюсь к использованию pre_get_posts чтобы установить замещение posts_clauses join, groupby, orderby и, возможно, ограничений, или даже оптовую замену всего запроса с помощью posts_request .

Есть ли более простой способ?

Solutions Collecting From Web of "Как перехватить основной запрос и ввести пользовательские соединения / порядок по / группе по критериям"

Если бы я понял тебя правильно …

  • [A] Многоналоговые запросы имеют проблему, заключающуюся в том, что они выполняют JOIN мета-таблицы для каждого термина. Так что imho – это не самая лучшая идея использовать встроенный способ.
  • [B.1.a] Я бы просто сделал обычный запрос с одним (главным) налоговым агентом, а затем выполнил сортировку в зависимости от значений мета. Так что на самом деле просто вызываем get_post_custom() и объединяем его с одним объектом post во время цикла, а затем добавляем его к результирующему массиву.
  • [B.1.b] Затем изменение запроса через posts_clauses если некоторые биты не соответствуют требованиям.
  • [B.2] Начните сортировку, например, по имени.
  • [B.3] Тогда я бы пошел и запустил некоторый цикл foreach / etc в результирующем массиве.

Преимущество браузера / php и DB не существует до сих пор (пока сайт не получил много обращений). Но если вы начнете мизировать css / js / html и кешируете полученные материалы (и доставляете результаты с жесткого диска), я думаю, что это было бы так, как я бы пошел.