Сортировать по бренду az Woocommerce переопределяет все другие таксономии - PullRequest
1 голос
/ 20 февраля 2020

Обновление по вопросу *

Итак! Я работал с кодом, опубликованным 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, я был бы очень признателен за помощь.

1 Ответ

0 голосов
/ 20 февраля 2020

Таким образом, вы можете добавить пользовательский параметр сортировки, хотя это будет зависеть от указания правильных $ args

/**
 * Add custom sorting options (asc/desc)
 */
function custom_woocommerce_get_catalog_ordering_args( $args ) {
    $orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
    if ( $orderby_value == 'brand_name' ) {
        $args['orderby'] = 'product_brand';
        $args['order'] = 'ASC';
        $args['meta_key'] = '';
    }
    return $args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_args' );

function custom_woocommerce_catalog_orderby( $sortby ) {
    $sortby['brand_name'] = 'Order by brand name';
    return $sortby;
}
add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...