/ Сайтостроение / Плагины / Интересные фишки для Woocommerce

Интересные фишки для Woocommerce

17.04.2019

364

Продолжаем серию интересных доработок для Woocmmerce.

Выведем дату последней покупки товара

У товара такого мета поля нет, нужно сопоставлять наименования (перебирая заказы). Для этого создаем запрос на перебор БД:

function get_orders_ids_by_product_id( $product_id, $order_status = array( 'wc-processing' ) ){
    global $wpdb;

    $results = $wpdb->get_col("
        SELECT order_items.order_id
        FROM {$wpdb->prefix}woocommerce_order_items as order_items
        LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta as order_item_meta ON order_items.order_item_id = order_item_meta.order_item_id
        LEFT JOIN {$wpdb->posts} AS posts ON order_items.order_id = posts.ID
        WHERE posts.post_type = 'shop_order'
        AND posts.post_status IN ( '" . implode( "','", $order_status ) . "' )
        AND order_items.order_item_type = 'line_item'
        AND order_item_meta.meta_key = '_product_id'
        AND order_item_meta.meta_value = '$product_id'
		ORDER BY post_date DESC
		LIMIT 1
    ");

    return $results;
}

В параметрах функции необходимо указать значения статусов заказа.

На заметку: синтаксис при переборе БД ORDER BY и LIMIT, чтобы получать один последний по дате заказ.

Далее создаем функцию вывода в карточке товара:

function get_last_date_buy_product() {
	global $product;
	$orders_ids = get_orders_ids_by_product_id( $product->get_id() );
	if ( $orders_ids ) { 
		$order = wc_get_order( $orders_ids[0] );
		$order_date = date('d.m.y', strtotime($order->get_date_completed()));
		echo '<div class="last-date">Последняя дата покупки: '.$order_date.'</div>'; 
	}
}
add_filter( 'woocommerce_single_product_summary', 'get_last_date_buy_product', 55 );

date(‘d.m.y’, strtotime($order->order_date)); — получение необходимого формата даты.

Рекомендованные товары в корзине

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

// Добавление в корзину Рекомендованных товаров
function related_products_in_cart() { 
	$products_ids_array = array(); // создаем массив товаров в корзине
	foreach( WC()->cart->get_cart() as $cart_item ){ $products_ids_array[] = $cart_item['product_id']; }
	
	$args = array(
		'post_type' => 'product',
		'posts_per_page' => 4,
		'product_cat'    => 'promo',
		'post__not_in' => $products_ids_array
	);
	query_posts($args);
	if(have_posts()) :
		echo '<h3>Вам также может понравится</h3><div class="carousel"><ul class="multiple-items woocommerce products">';
		while(have_posts()) : the_post();
			get_template_part('solus-product');
		endwhile; 
		echo '</ul></div>';
	endif; wp_reset_query();
};
add_action( 'woocommerce_cart_collaterals', 'related_products_in_cart', 12 );

Почему то вывод товаров через query_posts получает правильные wc_product_class(); а при выводе через get_posts их нет.

Содержимое solus-product:

<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>

Добавляем слово Цена перед стоимостью товара

//Добавляем слово «Цена»
add_filter( 'woocommerce_get_price_html', 'custom_price_html', 100, 2 );
function custom_price_html( $price, $product ){
	if ( !empty ( $price ) ) {
		return 'Цена: '.$price;
	}
}

Виджет категорий с раскрытием подкатегорий

Сделаем так, чтобы в виджете woocommerce_product_categories можно было раскрывать и скрывать подкатегории. Текущая категория будет по умолчанию раскрыта, так ка это работает сейчас.

Скрипт создания кнопки раскрытия

jQuery(document).ready(function(){
	setTimeout(function () {
		$('.product-categories li.menu-item-has-children').not('.current-cat-parent, .current-cat').prepend('<div class="open-btn"></div>');

		$('.open-btn').on('click', function(){
			$(this).nextAll('ul').toggleClass('ul-visible');
			$(this).toggleClass('open-btn-close');
		});	
	}, 1000);	
});

Стили кнопки с изменяем контентом + или —

ul.children.ul-visible > li {display: block;}

.open-btn {
    float: right;
    font-size: 1.2rem;
    line-height: 15px;
    width: 15px;
    background: #eee;
    text-align: center;
    margin-left: 7px;
}

.open-btn:before {content: "+";}

.open-btn.open-btn-close:before {content: "-";}

Тэги:

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Woocommerce основы

Woocommerce основы

Наиболее часто встречающиеся и необходимые вызовы при использовании плагина woocommerce, а так же прочие хитрости при работе с woocommerce. <?php echo $_product->get_sku( $cart_item ); ?> // Вывести артикул в корзине Читать далее »

Конвертировать цену в рубли

Конвертировать цену в рубли

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

Акции Woocommerce

Акции Woocommerce

В современном интернет-магазине необходимо постоянно проводить стимулирующие мероприятия — акции. Реализуем различные механизмы акций на движке Woocommerce. Акция (скидка) на категорию Если нам необходимо сделать скидку на всю категорию товаров. Читать далее »

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

Пока нет комментариев. Будь первым!

Интересные фишки для Woocommerce Интересные фишки для Woocommerce
Сравнение товаров (Compare)
Рекомендации для васСравнение товаров (Compare)Opttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.