Нет, заказ по таксономии невозможен, потому что с определенной точки зрения это не имеет особого смысла.
Таксономии - это способы группировать вещи. Таким образом, смысл наличия таксономии для должностей в действительности состоит в том, чтобы иметь в этой таксономии термины, которые распределяются между должностями. Если бы в таксономии были термины, которые использовались только в одном посте, это сделало бы таксономию бессмысленной. И если бы термины были разделены так, как они должны быть, то упорядочение по ним не принесло бы ничего особенно полезного.
В такой ситуации вы должны использовать мета-пост. Вы можете заказать по почте мета, и это уникально для каждого сообщения.
Изменить: Тем не менее, вы можете заказать по таксономии, сделав пользовательский запрос SQL с использованием фильтра, вы просто не можете сделать это из неизмененного WP_Query: http://scribu.net/wordpress/sortable-taxonomy-columns.html
Однако, если вам приходится прибегать к подобным вещам, то ваша структура проектирования данных, в первую очередь, неверна. «Термины» в таксономии не являются фактическими «данными». Сами термины не имеют внутреннего значения, они просто обозначают те группы, которые они описывают. Если вы рассматриваете их как значимые данные, то у вас есть основной недостаток дизайна.
Таксономии группируют вещи, назначая им термины. Эта группировка - весь смысл таксономий, термины - это просто симпатичные лица в группе. Если у вас есть значимые метаданные для назначения посту, вам следует вместо этого использовать метаданные поста. И это вы можете упорядочить, потому что post meta использует и ключи, и значения для хранения информации. С таксономией вы на самом деле храните только ключи, а их значения - это посты, сгруппированные по этому термину.
В конечном итоге все будет проще, если вы используете правильный подход. Хотя я не говорю, что с таксономией нельзя сделать что-то странное, в долгосрочной перспективе вы просто усложняете себе задачу, неправильно используя ее.
Принятый ответ на этот вопрос неприемлем. Нелогично предполагать, что упорядочение по налогам «не имеет смысла». Ответ, который он дал, не имеет смысла.
Рассмотрите возможность иметь тип сообщения меню. Тогда у вас есть таможенный налог "FoodCategories". Налог FoodCategories имеет условия "Завтрак", "Обед" и "Ужин". Если вы отправляете запрос, используя параметр tax_query, теперь у вас есть набор результатов со всеми терминами, однако они упорядочены по дате публикации.
Чтобы получить из них правильный порядок относительно их терминов, а затем соответствующим образом отобразить их на внешнем интерфейсе, разделив посты по их различным категориям, вы должны пройтись по набору результатов, а затем запросить каждый отдельный пост в набор результатов, чтобы найти его термины и сравнить с текущим термином, отфильтровать в массив и продолжить. Затем вы должны снова перебрать новый массив для отображения. Это не продуктивно.
Было бы неплохо, если бы у WP была опция orderby «tax__in», как и у «post__in», но так как она отсутствует, вам также придется выполнить вышеупомянутый нелепый процесс; самостоятельно настроить запрос с помощью фильтра posts_orderby и posts_join, чтобы настроить метод orderby и добавить термин в результирующий набор соответственно; или вы должны сделать новый запрос для каждого термина, который вы фильтруете в разделах html относительно этих терминов.
Наиболее эффективным было бы изменить строку запроса с помощью фильтров. Самым простым было бы сделать три отдельных запроса. WP API должен обрабатывать упорядочение по налогам или любые ограничивающие параметры запроса. Если вы ограничиваете запрос, основанный на определенных условиях, существует высокая вероятность того, что многим придется заказывать по тем же условиям.
источник
Да, но это довольно сложно ...
Добавьте к functions.php в вашей теме:
Это Франкенштейн из некоторых найденных вещей и вещей, которые я сделал сам. Объяснить это довольно сложно, но суть этого бега, вы можете поставить? Orderby = (запрос таксономии var) & order = ASC (или DESC), и она сразу начнёт!
источник
add_filter('posts_clauses', 'orderby_tax_clauses', 10, 2 );
наadd_filter('posts_clauses', 'todo_tax_clauses', 10, 2 );
Спасибо :)Я опаздываю на игру, но есть более простой способ сделать это на WordPress.
Создайте свой налоговый запрос, как обычно.
Настройте свои аргументы для query_posts или WP_Query
Перед тем, как сделать запрос query_posts / WP_Query, подключитесь к фильтру orderby и переопределите его.
не забудьте потом удалить фильтр ...
это работает, потому что tax_query создает объединения и т.д. для вас, вам просто нужно упорядочить по одному из полей из объединения.
источник
Ну, я бы хотел поделиться своим опытом сортировки пользовательских типов постов по категориям / таксономии.
ПАУТИНА
ДЕЛО
На страницах списка категорий архива клиент хотел сортировать сообщения по
ШАГИ
Во-первых , я ловлю запрос от неизмененного запроса к странице архива, который оказался следующим:
Во-вторых , я отредактировал SQL-код в Sequel Pro для базы данных, чтобы он соответствовал моим потребностям. Я выступаю с этим (да, возможно, это можно улучшить: мои знания по MySQL не выдаются):
В-третьих , я подключил запрос к файлу functions.php тремя фильтрами: posts_fields, posts_join и posts_orderby
Код в functions.php:
Наконец, я включил фильтры из ловушки pre_get_post в соответствии с некоторыми условиями
Надеюсь, что это может помочь кому-то
источник
У меня была очень похожая проблема, с которой я столкнулся: я хочу заказать собственный архив пост-типа (журнальные статьи) с помощью собственной таксономии (выпуски). Я никогда не делаю прямых запросов SQL на своем сайте - и обычно, если вы похожи на эти другие ответы - вам нужно переосмыслить свой подход.
ПРОБЛЕМЫ:
1) Wordpress не позволяет вам заказывать таксономии любым разумным способом.
2) Wordpress просто не позволяет
orderby
использовать таксономии в пост-типе WP_Query (как изложено Отто).РЕШЕНИЯ:
1) На данный момент сортировка таксономий лучше всего выполняется с помощью плагина NE пользовательских таксономических заказов. Это позволяет вам заказать таксономию через WYSIWYG,
wp-admin
что не совсем так, как я бы это сделал, но я не нашел ничего лучшего.Когда вы установите плагин, вы получите нечто похожее на то, что я сделал здесь. Запишите эту опцию
Auto-sort Queries of this Taxonomy
- установите для нее значениеCustom Order as Defined Above
; это дает вам заказ, который вам нужен. Скриншот:2) Имея отсортированную таксономию, вы можете теперь создавать серию вызовов WP_Query, которые выполняются через каждый термин, эффективно создавая архив, упорядоченный таксономией. Используйте
get_terms()
для создания массива всех налоговых терминов, а затем выполнитеforeach
над каждым термином. Это создаетWP_Query
для каждого элемента термина, который будет возвращать все сообщения за данный термин, эффективно создавая архив, упорядоченный по термину таксономии. Код для этого:Связанное чтение на этом сайте: Показать все сообщения в пользовательском типе сообщения, сгруппированные по пользовательской таксономии
источник
Я не уверен, почему все решения здесь в значительной степени превосходят его. Хорошо, это было полвека назад, но я сейчас запускаю следующий код, и он работает:
Это позволит сначала отсортировать таксономии вашего CPT по его таксономии в алфавитном порядке, а внутри этих групп таксономий - по алфавиту.
источник
Вот решение, которое я использовал для этой конкретной проблемы. Это решение предназначено для крайних случаев, когда невозможно использовать
pre_get_posts
фильтр, и в запросе существует разбиение на страницы (например, WooCommerce):Я использовал это, чтобы создать навигационное меню, упорядоченное по таксономии, сроку и количеству пост-терминов.
Если вы просто хотите сообщения, измените запрос на
SELECT p.*
иGROUP BY p.ID
источник
Это как запрос перед запросом, но не будет беспокоить, если мы не будем запрашивать слишком много сообщений ... Идея состоит в том, чтобы изменить основной запрос, чтобы нам даже не нужно было переходить к шаблонам и генерировать новые запросы и петли ...
источник