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

Хуки для woocommerce

HIT

27.08.2015

14092

Здесь собраны наиболее востребованные хуки 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 многое поменялось, в частности классы элементов.

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

  • Похожие записи
  • Комментарии
  • Вложения
Модификация Woocommerce

Модификация Woocommerce

Продолжаем серию модификаций модуля интернет коммерции Woocommerce. Скрыть колонки редактирования товаров add_filter( 'manage_edit-product_columns', 'change_columns_filter',10, 1 ); function change_columns_filter( $columns ) { unset($columns['product_tag']); unset($columns['sku']); unset($columns['featured']); return $columns; } Тоже самое можно Читать далее »

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

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

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

/
Плагины для woocommerce (нюансы)

Плагины для woocommerce (нюансы)

Рассмотрим различные плагины дополняющие функционал woocommerce, а также различные нюансы их использования. YITH WooCommerce Wishlist Плагин для добавление в ИМ раздела Избранное. В который можно/нужно помещать товары которые могут понадобится Читать далее »

/

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

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

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