/ Плагины / Хуки для woocommerce

Хуки для woocommerce

HIT

27.08.2015

15630

Здесь собраны наиболее востребованные хуки woocommerce, которые могут пригодится при настройке любого интернет-магазина. С другими полезными хуками можно ознакомиться здесь

Необходимые части кода вставляем в файл functions (лучше использовать отдельный файл для функций woocommerce)

Изменения базовых параметров WC

//количество выводимых на странице товаров
add_filter('loop_shop_per_page', create_function('$cols', 'return 30;')); // устаревшая функция (конфликтует с php 7.2)
add_filter( 'loop_shop_per_page', function ( $cols ) { return 20; }, 20 ); // актуальная функция


//!!! Изменяем количество колонок
add_filter('loop_shop_columns', 'loop_columns');
	if (!function_exists('loop_columns')) {
		function loop_columns() {
		return 3;
	}
}


// Изменяем количество похожих товаров
add_filter( 'woocommerce_output_related_products_args', 'jk_related_products_args' );
function jk_related_products_args( $args ) {
	$args['posts_per_page'] = 3; // количество "Похожих товаров"
	$args['columns'] = 3; // количество колонок
	return $args;
}

Убрать ссылку на товар из категории

remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 );
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 );

Изменить ссылку Добавить в корзину на переход в карточку товара:

// Убрать кнопку добавить в корзину из категорий
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart');
add_action( 'woocommerce_after_shop_loop_item', 'add_inside_enter_button' );
function add_inside_enter_button() { 
	global $product;
	echo '<a class="button product_type_simple add_to_cart_button" href="'.get_permalink($product->get_ID()).'">Подробнее</a>'; 
};

Переход в Оформление товара при добавлении товара в корзину (в настройках WC можно настроить переход в Корзину при добавлении товара):

// Редирект к оформлению после добавления товара
function bbloomer_redirect_checkout_add_cart( $url ) {
    $url = get_permalink( get_option( 'woocommerce_checkout_page_id' ) ); 
    return $url;
}
add_filter( 'woocommerce_add_to_cart_redirect', 'bbloomer_redirect_checkout_add_cart' );

Убрать ссылку на полное изображение товара (в шаблоне товара)

add_filter('woocommerce_single_product_image_thumbnail_html','wc_remove_link_on_thumbnails' );

function wc_remove_link_on_thumbnails( $html ) {
     return strip_tags( $html,'<img>' );
}

Изменение составляющих WC: категория товаров

// описание категории после товаров
remove_action( 'woocommerce_archive_description', 'woocommerce_taxonomy_archive_description', 10 );
add_action( 'woocommerce_after_shop_loop', 'woocommerce_taxonomy_archive_description', 100 );

// html теги в описании категории товара
foreach ( array( 'pre_term_description' ) as $filter ) {
	remove_filter( $filter, 'wp_filter_kses' );
}
foreach ( array( 'term_description' ) as $filter ) {
	remove_filter( $filter, 'wp_kses_data' );
}

Вывести описание категории на всех страницах пагинации

function my_theme_woocommerce_taxonomy_archive_description() {
    if ( is_tax( array( 'product_cat', 'product_tag' ) ) && get_query_var( 'paged' ) != 0 ) {
        $description = wc_format_content( term_description() );
        if ( $description ) {
            echo '<div class="term-description">' . $description . '</div>';
        }
    }
}
add_action( 'woocommerce_archive_description', 'my_theme_woocommerce_taxonomy_archive_description');

Выводим изображение категории перед описанием

function woocommerce_taxonomy_archive_image() {
	global $wp_query;
	$term = $wp_query->get_queried_object();
	$thumbnail_id = get_term_meta( $term->term_id, 'thumbnail_id', true );
	$image = wp_get_attachment_url( $thumbnail_id );

	if (!empty($image)) {
		echo '<img src="'.$image.'" title="'.$term->name.'" alt="'.$term->name.'" 
		srcset="'.wp_get_attachment_image_srcset( $thumbnail_id, 'large' ).'" sizes="'.wp_get_attachment_image_sizes( $thumbnail_id, 'large' ).'">'; 
	}
}
add_action( 'woocommerce_after_shop_loop', 'woocommerce_taxonomy_archive_image', 90 );

Альтернативный вариант вывода изображения категории (в некотором смысле более правильный):

// Выводим изображение таксономии
function woocommerce_taxonomy_archive_image() {
	global $wp_query;
	$term = $wp_query->get_queried_object();
	if ( is_tax() ) {
		$thumbnail_id = get_term_meta( $term->term_id, 'thumbnail_id', true );
		$image = wp_get_attachment_url( $thumbnail_id );
		echo '<img src="'.$image.'" title="'.$term->name.'" alt="'.$term->name.'" class="term-image" 
		srcset="'.wp_get_attachment_image_srcset( $thumbnail_id, 'large' ).'" sizes="'.wp_get_attachment_image_sizes( $thumbnail_id, 'large' ).'">';
	}
}
add_action( 'woocommerce_after_shop_loop', 'woocommerce_taxonomy_archive_image', 90 );

Обернуть описание категории товаров в div

function add_class_to_term_description($term_description) {
	if( !is_admin() ) {
		echo '<div class="cell">' . $term_description. '</div>';
	}
}
add_filter( 'term_description', 'add_class_to_term_description' );

Ajax-добавление в шаблоне товара

Как известно в карточке товара при добавлении страница перезагружается. Изменим это:

remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_loop_add_to_cart', 30 );

Решение не идеальное, т.к. мы убираем функционал количества, но если данный параметр не важен, то можно использовать.
Если нужно чтобы количество все же было, то нужно использовать функцию добавления количества в шаблоне архива, добавив к ней еще один хук:

add_action( 'woocommerce_single_product_summary', 'custom_quantity_field_archive', 30 );
И все же решение корявое, т.к. в вариативных товарах и товарах без цены будут дублироваться кнопки из шаблона архивов
Есть неплохой плагин создающий данную возможность — WooCommerce Ajax Add to Cart. Но нужно устанавливать последнюю версию, т.к. в WC 3.0 многое поменялось, в частности классы элементов.
[site-socialshare]
  • Похожие записи
  • Комментарии
  • Вложения
Несколько менеджеров магазина

Несколько менеджеров магазина

Предположим что мы делаем интернет-магазин оптовой компании нацеленной работу с уже имеющимися клиентами. Есть ряд менеджером к котором прикреплены те или иные клиенты. Как сделать так, чтобы заказы распределялись между Читать далее »

Трекинг заказа

Трекинг заказа

Рассмотрим такой аспект работы интернет-магазина как трекинг заказа (order tracking), т.е. отслеживание статуса и местоположения заказа. YITH WooCommerce Order Tracking 8000 установок. В бесплатной версии добавляет к заказу (в админке) Читать далее »

Watermark для изображений товаров (обзор плагинов)

Watermark для изображений товаров (обзор плагинов)

Рассмотрим различные плагины по добавлению водяного знака (watermark) на изображения товаров. WooCommerce Products Image Watermark (BeRocket) Плагин не понравился. Логотип добавляется только одним способом, с указанием положения. Можно перезагрузить загруженные Читать далее »

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

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

Хуки для woocommerce
Манипуляции с меню
Рекомендации для васМанипуляции с менюOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.