Похожие товары реализованы не совсем грамотно: если добавлять товарам метки (присущие большинству товаров, например 33 класс у ламината), то похожие товары будут выводится практически одни и те же.
Исправляем данный недочет так: в нашей локализованной версии woocommerce находим файл /themes/current-theme/woocommerce/single-product/related.php и меняем строку
$related = $product->get_related( $posts_per_page );
на
$related = get_related_custom($product->id);
А в файл funсtions.php добавляем код
//New "Related Products" function for WooCommerce function get_related_custom( $id, $limit = 5 ) { global $woocommerce; // Related products are found from category and tag $tags_array = array(0); $cats_array = array(0); // Get tags /* $terms = wp_get_post_terms($id, 'product_tag'); foreach ( $terms as $term ) $tags_array[] = $term->term_id; */ // Get categories (removed by NerdyMind) $terms = wp_get_post_terms($id, 'product_cat'); foreach ( $terms as $term ) $cats_array[] = $term->term_id; // Don't bother if none are set if ( sizeof($cats_array)==1 && sizeof($tags_array)==1 ) return array(); // Meta query $meta_query = array(); $meta_query[] = $woocommerce->query->visibility_meta_query(); $meta_query[] = $woocommerce->query->stock_status_meta_query(); // Get the posts $related_posts = get_posts( apply_filters('woocommerce_product_related_posts', array( 'orderby' => 'rand', 'posts_per_page' => $limit, 'post_type' => 'product', 'fields' => 'ids', 'meta_query' => $meta_query, 'tax_query' => array( 'relation' => 'OR', array( 'taxonomy' => 'product_cat', 'field' => 'id', 'terms' => $cats_array ), array( 'taxonomy' => 'product_tag', 'field' => 'id', 'terms' => $tags_array ) ) ) ) ); $related_posts = array_diff( $related_posts, array( $id )); return $related_posts; } add_action('init','get_related_custom');
В данном коде объединены 2 метода выборки Похожих товаров, но выборка по тэгам отключена (лучше ее и не включать).
Тэги: woocommerce
а как можно исключить определенные категории из похожих товаров
Я думаю так: в запрос $related_posts = get_posts( apply_filters(‘woocommerce_product_related_posts’, array(
попытаться добавить: либо ‘exclude’ => категорию woocommerce которая не нужна, либо еще вот вариант попался:
$args[‘tax_query’] = array(
array(
‘taxonomy’ => ‘category’,
‘terms’ => array(‘cat’, ‘dog’),
‘field’ => ‘slug’,
‘operator’ => ‘NOT IN’,
),
);
query_posts($args);
Я наверное поторопился с ответом, ведь в вышеописанном решении мы делаем чтобы похожие товары выводились из той же категории что и товар. Поэтому исключать ее не имеет смысла.
Есть такой прикол, я поставил вывод 6 похожих. Но если к товару присвоена только 1 категория, выводится почему-то 5, если больше 1, то 6, подскажите как исправить
А в категории всего сколько товаров? больше 5шт?
теперь в версии вукомерца 2.6.8 всё по другому в файлике related.php, данный способ ещё можно реализовать?
Не готов утверждать со 100% уверенностью, но должен работать и на последней версии. У меня на сайтах работает.
Ясное дело работает, вы же это в шаблоне прописали!
А сейчас в related.php это встречается только здесь:
if ( ! $related = $product->get_related( $posts_per_page ) ) {
return;
}
Что, ясен пень, не дает ничего
Подскажите, как поменять выдачу Related products в теме MediaCenter для WP? Хотя бы где искать файл, отвечающий за выдачу? Нигде не нашел.. У меня цель, чтобы похожие товары показывались не из категорий, как это по умолчанию, а из подкатегорий. Срок Техподдержки уже прошел, поэтому официально вопрос негде задать.
Здравствуйте, а как выбрать похожие товары по одному конкретному атрибуту
Добрый день! Сам не пробовал. Нашел вот такой плагин Woo Related Products (6000+ установок). Судя по количеству установок, должен работать нормально. И функционал вывода похожих товаров по атрибутам в описании есть.