По умолчанию Woocommerce товары выводятся в виде похожих из товаров в категории. Это неудобно, так как не позволяют вывести в каталоге товаров правильно похожие. Решаем задачу просто с помощью сниппета. Вставляем в function.php или в место для кода вот такой сниппет:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
function wds_display_relatd_products_from_primary_category( $related_posts, $product_id, $args ) { global $product; $primary_cat_id = $product->get_category_ids()[0]; $primary_cat_info = get_term_by( 'id', $primary_cat_id, 'product_cat' ); $primary_cat_slug = $primary_cat_info->slug; $args = array( 'status' => 'publish', 'category' => array( $primary_cat_slug ), 'return' => 'ids', 'excluded_ids' => array( $product_id ), 'posts_per_page' => 15, 'visibility' => 'catalog', 'order' => 'rand', 'tax_query' => array( array( 'taxonomy' => 'pa_tip-tovara', 'field' => 'slug', 'terms' => get_term( $product->get_attributes()['pa_tip-tovara']['options'][0], 'pa_tip-tovara' ), 'operator' => 'IN', ) ), // 'tax_query' => array( array( // 'taxonomy' => 'pa_vid-tovara', // 'field' => 'slug', // 'terms' => get_term( $product->get_attributes()['pa_vid-tovara']['options'][0], 'pa_vid-tovara' ), // 'operator' => 'IN', // ) ) ); $related_posts = wc_get_products( $args ); if(count($related_posts) == 0){ $args = array( 'status' => 'publish', 'category' => array( $primary_cat_slug ), 'return' => 'ids', 'excluded_ids' => array( $product_id ), 'posts_per_page' => 15, 'visibility' => 'catalog', 'order' => 'rand', 'tax_query' => array( array( 'taxonomy' => 'pa_tip-tovara', 'field' => 'slug', 'terms' => get_term( $product->get_attributes()['pa_tip-tovara']['options'][0], 'pa_tip-tovara' ), 'operator' => 'IN', ) ) ); $related_posts = wc_get_products( $args ); } return $related_posts; } add_filter( 'woocommerce_related_products', 'wds_display_relatd_products_from_primary_category', 10, 3 ); |
В данном варианте выведен порядок отображения похожих товаров Woocommerce по атрибутам вид товара и тип товара. Если нет похожих то применяется уже категория товаров.