/ Wordpress / «Правильные» похожие товары в woocommerce

«Правильные» похожие товары в woocommerce

HIT

21.09.2015

17609

12

Похожие товары реализованы не совсем грамотно: если добавлять товарам метки (присущие большинству товаров, например 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 метода выборки Похожих товаров, но выборка по тэгам отключена (лучше ее и не включать).

Похожие товары только в наличии

Данная функция никак не связана с предыдущей, распространяется на стандартный вывод похожих товаров

// Похожие товары в наличии

add_filter( 'woocommerce_related_products', 'mysite_filter_related_products', 10, 1 );
function mysite_filter_related_products( $related_product_ids ) {

    foreach( $related_product_ids as $key => $value ) {
        $relatedProduct = wc_get_product( $value );
        if( ! $relatedProduct->is_in_stock() ) {
            unset( $related_product_ids["$key"] );
        }
    }

    return $related_product_ids;
}
Работает не вполне корректно, т.к. запрос к товарам происходит раньше, а далее мы фильтруем не выводить товары которых нет в наличии. В результате в Похожим может не вывестись товаров даже если они по факту есть.

Собственный вывод похожих товаров

В данном случае товаров из этой же категории, которые есть в наличии

// Содержимое вкладки Похожие товары
function related_product_tab_content() { 
	//do_action('tab_woocommerce_related_products');
	
	global $post;
	$terms = get_the_terms( $post->ID, 'product_cat' );
	
	$args = array(
		'post_type' => 'product',
		'posts_per_page' => 3,
		'product_cat' => $terms[0]->slug,
		'meta_query' => array(
			array(
				'key'     => '_stock_status',
				'value'   => 'instock',
			)
		),
	'post__not_in' => array($post->ID),
	);
		
	query_posts($args);

	if (have_posts()) :
	echo '<section class="related products"><h2 class="center">Похожие товары</h2>';			
	echo '<ul class="products columns-3">';
	while (have_posts()) : the_post(); ?>
	
		<li <?php wc_product_class(); ?>><span>
			<?php do_action('woocommerce_before_shop_loop_item');
			do_action('woocommerce_before_shop_loop_item_title');
			do_action('woocommerce_shop_loop_item_title');
			do_action('woocommerce_after_shop_loop_item_title');
			do_action('woocommerce_after_shop_loop_item'); ?>
		</span></li>
	
	<?php endwhile; 
	echo '</ul></section>';
	endif; wp_reset_query();
}

Поделиться в соц. сетях:

  • Похожие записи
  • Комментарии
  • Вложения
Отключаем лишний функционал Woocommerce

Отключаем лишний функционал Woocommerce

Отключаем невостребованные функции Woocommerce, чтобы было легче работать, не захламлять админку и не путать заказчиков. Отключить типы товаров Удалить чекбоксы виртуальный и загружаемый товары Удалить их также из фильтра админки: Читать далее »

Новинка (товар NEW полем)

Новинка (товар NEW полем)

Ранее были рассмотрены варианты добавления лэйбла New полуавтоматическим способом (последние созданные товары, либо по времени от текущего), либо назначением метки NEW. Здесь разберем как сделать данный функционал полем и какие Читать далее »

/
Апселлы и кросселы

Апселлы и кросселы

У Woocommerce есть функционал Апселлы (аналоги) и Кросселы (сопутствующие). Апселлы Апселлы — лучшие товары которые вы бы рекомендовали в замен данному. К примеру, товары которые лучше по качеству или каким-то Читать далее »

Добавить комментарий

12 комментариев

  1. mur

    а как можно исключить определенные категории из похожих товаров

    1. maker1447

      Я думаю так: в запрос $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);

    2. maker1447

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

  2. Николай

    Есть такой прикол, я поставил вывод 6 похожих. Но если к товару присвоена только 1 категория, выводится почему-то 5, если больше 1, то 6, подскажите как исправить

    1. maker1447

      А в категории всего сколько товаров? больше 5шт?

  3. Николай

    теперь в версии вукомерца 2.6.8 всё по другому в файлике related.php, данный способ ещё можно реализовать?

    1. maker1447

      Не готов утверждать со 100% уверенностью, но должен работать и на последней версии. У меня на сайтах работает.

      1. Егор

        Ясное дело работает, вы же это в шаблоне прописали!

        А сейчас в related.php это встречается только здесь:
        if ( ! $related = $product->get_related( $posts_per_page ) ) {
        return;
        }
        Что, ясен пень, не дает ничего

  4. Рэй

    Подскажите, как поменять выдачу Related products в теме MediaCenter для WP? Хотя бы где искать файл, отвечающий за выдачу? Нигде не нашел.. У меня цель, чтобы похожие товары показывались не из категорий, как это по умолчанию, а из подкатегорий. Срок Техподдержки уже прошел, поэтому официально вопрос негде задать.

  5. Анна

    Здравствуйте, а как выбрать похожие товары по одному конкретному атрибуту

    1. Alexandr

      Добрый день! Сам не пробовал. Нашел вот такой плагин Woo Related Products (6000+ установок). Судя по количеству установок, должен работать нормально. И функционал вывода похожих товаров по атрибутам в описании есть.

  6. Александр

    А вот за это особые, как говориться, респект и уважуха!!!
    Благодарю!

«Правильные» похожие товары в woocommerce
Автоматическая разбивка записей по тегам
Рекомендации для васАвтоматическая разбивка записей по тегамOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.