Обновление по вопросу *
Итак! Я работал с кодом, опубликованным L7c1f3r ниже, но я просто не могу заставить его работать. Я должен как-то объявить таксономию в качестве переменной для $ args, но я не могу найти никаких полезных сообщений - я опробовал большинство ответов, которые нашел, но все же - не повезло. Любая помощь будет принята с благодарностью.
Оригинальное сообщение
Первый вопрос по stackoverflow!
У меня есть сайт разработки WordPress, где я использую плагин Woocommerce для продажи продуктов. У меня также есть плагин для брендов. Наша компания вращается вокруг маркетинга продуктов вокруг бренда. Поэтому я искал способ переопределить параметры сортировки по умолчанию на страницах архива продуктов woocommerce на go в алфавитном порядке по названию бренда вместо других стандартных параметров.
Обновление: уточнение предполагаемого функция *
Продукт A принадлежит торговой марке A
Продукт B принадлежит торговой марке B
Продукт C относится к торговой марке A
При заказе следует выводить продукцию, подобную этой:
Продукт A, Марка A
Продукт C, Марка A
Продукт B, Марка B
. .........
После долгих поисков ответов в Интернете я нашел следующий фрагмент:
add_filter('posts_clauses', 'posts_clauses_with_tax', 10, 2);
function posts_clauses_with_tax( $clauses, $wp_query ) {
global $wpdb;
$taxonomies = array('product_brand');
$orderBy['field'] = "product_brand";
$orderBy['direction'] = "ASC";
if(in_array($orderBy['field'], $taxonomies)) {
$clauses['join'] .= "
LEFT OUTER JOIN {$wpdb->term_relationships} AS rel2 ON {$wpdb->posts}.ID = rel2.object_id
LEFT OUTER JOIN {$wpdb->term_taxonomy} AS tax2 ON rel2.term_taxonomy_id = tax2.term_taxonomy_id
LEFT OUTER JOIN {$wpdb->terms} USING (term_id)
";
$clauses['where'] .= " AND (taxonomy = '".$orderBy['field']."' OR taxonomy IS NULL)";
$clauses['groupby'] = "rel2.object_id";
$clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.slug ORDER BY slug ASC) ";
// $clauses['orderby'] .= ( 'ASC' == strtoupper( $orderBy['direction'] ) ) ? 'ASC' : 'DESC';
$clauses['orderby'] .= ", {$wpdb->posts}.post_title ASC";
return $clauses;
}
else {
return $clauses;
}
}
Фрагмент выполняет свою работу, однако - он также удаляет все другие таксономии (сообщения, изображения и т. д. c) из просмотра и использования. См. Изображения до и после.
Перед запуском фрагмента - Медиатека
Перед запуском фрагмента - страница сообщений
После запуска сниппета - Медиатека
После запуска сниппета - страница сообщений
Я думаю , что проблема в том, что сниппет Предполагая, что у всех типов таксономий есть поле, называемое «бренд», и поэтому все это удаляется, когда он не может найти его, например, после таксономии. Я пытался объявить таксономию продукта и добавить ее как надежную переменную в оператор if, но безрезультатно.
Кто-нибудь знает, как заставить эту функцию работать только для таксономии product_brand? Или, если есть еще лучший способ сделать то, что я пытаюсь выполнить sh, я был бы очень признателен за помощь.