Woocommerce 3.0 фильтрация связанных продуктов - PullRequest
0 голосов
/ 03 июня 2018

Есть ли способ исключить товары из раздела сопутствующих товаров, у которых есть атрибут с определенным значением.Например, я хочу получить связанные товары по категориям, за исключением товаров с атрибутом attribute_value('pa_season') = summer;

Я пробовал это, но это не работает

add_filter( 'woocommerce_related_products_args', 'filter_related_products' );
function filter_related_products( $args ) {
    global $product;
    return array(
       'post_type'            => 'product',
       'ignore_sticky_posts'  => 1,
       'no_found_rows'        => 1,
       'posts_per_page'       => 4,
       'orderby'              => 'ASC',
       'post__not_in'         => array( $product->get_id() ),
       'tax_query'      =>     array(
              array(
                  'taxonomy' => 'pa_epoxi',
                  'field' => 'slug',
                  'terms' => 'autumn-winter'
              )
        )
    );
}

РЕДАКТИРОВАТЬ: я обнаружил, что могу использоватьфильтр woocommerce_product_related_posts_query для редактирования запроса, который выбирает связанные продукты из базы данных.

Я попробовал следующий код:

add_filter( 'woocommerce_product_related_posts_query', function( $query ) {
    $query['where'] .= " AND t.term_id !=100";
    return $query;
});

Но я получаю сообщение об ошибке: Неизвестный столбец 't.term_id' в 'выражении where'

1 Ответ

0 голосов
/ 05 июня 2018

Мне удалось исключить нужные мне термины с помощью фильтра woocommerce_product_related_posts_query и отредактировать запрос SQL следующим образом:

function exclude_terms_from_related_products( $query ) {
    global $wpdb;
    $exclude_term_ids[0] = 100; // term_id
    $query['join']  .= " LEFT JOIN ( SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id IN ( " . implode( ',', array_map( 'absint', $exclude_term_ids ) ) . ' ) ) AS exclude_join1 ON exclude_join1.object_id = p.ID';
    $query['where'] .= ' AND exclude_join1.object_id IS NULL';
    return $query;
}
add_filter( 'woocommerce_product_related_posts_query', 'exclude_terms_from_related_products' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...