WordPress / WooCommerce — Сопутствующие товары по атрибуту

Я знаю, что я не первый и, вероятно, не буду последним, кто попытается сделать это путешествие успешным. Я посмотрел на все, что там.

Большинство ответов до WC 2.1.

Многие ответы работают с tax_query. Время от времени кто-то пытается коснуться запроса. Я пробовал оба варианта, ни один из вариантов не работает для меня.

Как настроить связанные продукты, показанные в WooCommerce, для включения отношений через пользовательские атрибуты?

Цель: Отношения через Cat AND (Бренд ИЛИ Исполнитель ИЛИ Производитель)

Тест через woocommerce_product_related_posts_query:

function product_related_posts_relate_by_attributes ( $query ){
global $product;

//*
$brands_array        = wc_get_product_terms( $product->id, 'pa_brand', array( 'fields' => 'ids' ) );
$artists_array       = wc_get_product_terms( $product->id, 'pa_artist', array( 'fields' => 'ids' ) );
$manufacturers_array = wc_get_product_terms( $product->id, 'pa_manufacturer', array( 'fields' => 'ids' ) );

$query['where'] .= ' AND (';
$query['where'] .= " ( tt.taxonomy = 'pa_brand' AND t.term_id IN ( " . implode( ',', $brands_array ) . " ) ) ";
$query['where'] .= ' OR ';
$query['where'] .= " ( tt.taxonomy = 'pa_artist' AND t.term_id IN ( " . implode( ',', $artists_array ) . " ) ) ";
$query['where'] .= ' OR ';
$query['where'] .= " ( tt.taxonomy = 'pa_manufacturer' AND t.term_id IN  ( " . implode( ',', $manufacturers_array ) . " ) ) ";
$query['where'] .= ')';//*/

return $query;
}
add_filter('woocommerce_product_related_posts_query', 'product_related_posts_relate_by_attributes');

Тест через woocommerce_related_products_args:

function custom_related_product_args ( $args ){
global $product;

$cats          = wc_get_product_terms( $product->id, 'product_cat', array( 'fields' => 'slug' ) );
$brands        = wc_get_product_terms( $product->id, 'pa_brand', array( 'fields' => 'slug' ) );
$artists       = wc_get_product_terms( $product->id, 'pa_artist', array( 'fields' => 'slug' ) );
$manufacturers = wc_get_product_terms( $product->id, 'pa_manufacturer', array( 'fields' => 'slug' ) );

unset( $args['post__in'] );
$args['tax_query'] = array(
'relation' => 'AND',
array(
'taxonomy' => 'category',
'field'    => 'slug',
'terms'    => $cats,
),
array(
'relation' => 'OR',
array(
'taxonomy' => 'pa_brand',
'field'    => 'slug',
'terms'    => $brands,
),
array(
'taxonomy' => 'pa_artist',
'field'    => 'slug',
'terms'    => $artists,
),
array(
'taxonomy' => 'pa_manufacturer',
'field'    => 'slug',
'terms'    => $manufacturers,
)
)
);

return $args;
}
add_filter('woocommerce_related_products_args', 'custom_related_product_args');

Может ли кто-то быть таким любезным, чтобы сказать мне, где я иду не так?

Заранее большое спасибо!

2

Решение

Я попытался «проверить через woocommerce_related_products_args», и, похоже, вам просто нужно изменить «Слизняк» в «слизняки» а также «Категория» в ‘Product_cat’ 🙂

global $product;

$cats          = wc_get_product_terms( $product->id, 'product_cat', array( 'fields' => 'slugs' ) );
$brands        = wc_get_product_terms( $product->id, 'pa_brand', array( 'fields' => 'slugs' ) );
$artists       = wc_get_product_terms( $product->id, 'pa_artist', array( 'fields' => 'slugs' ) );
$manufacturers = wc_get_product_terms( $product->id, 'pa_manufacturer', array( 'fields' => 'slugs' ) );

unset( $args['post__in'] );
$args['tax_query'] = array(
'relation' => 'AND',
array(
'taxonomy' => 'product_cat',
'field'    => 'slug',
'terms'    => $cats,
),
array(
'relation' => 'OR',
array(
'taxonomy' => 'pa_brand',
'field'    => 'slug',
'terms'    => $brands,
),
array(
'taxonomy' => 'pa_artist',
'field'    => 'slug',
'terms'    => $artists,
),
array(
'taxonomy' => 'pa_manufacturer',
'field'    => 'slug',
'terms'    => $manufacturers,
)
)
);

return $args;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]