Woocommerce полезные хуки
При работе с плагином Woocommerce на сайте часто требуется изменять вид отображения карточек товара, корзины и многое другое.
Для этих целей можно править шаблоны, применять плагины и использовать хуки. В этом посте я буду собирать полезные хуки для вукомерц.
Хуки (hooks)
<!-- more -->
/* убрать ссылку с карточки товара */
add_action('woocommerce_before_shop_loop_item', 'remove_link', 1);
function remove_link() {
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 );
}
/* убрать ссылку с корзины */
add_filter( 'woocommerce_cart_item_name', 'mad_remove_cart_product_link', 1, 3 );
function mad_remove_cart_product_link( $product_link, $cart_item, $cart_item_key ) {
$product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
return " Ч " . $product->get_title() . " Ч ";
}
// Выводит в карточке товара В наличии, по умолчанию в наличии не выводит, только предзаказ и нет в наличии выводит
add_filter( 'woocommerce_get_availability', 'wcs_custom_get_availability', 1, 2);
function wcs_custom_get_availability( $availability, $_product ) {
// Change In Stock Text
if ( $_product->is_in_stock() ) {
if (get_post_meta(get_the_ID(), '_stock_status', true) == 'instock') {
$availability['availability'] = __('в наличии', 'woocommerce');
}
}
return $availability;
}
/* вывести краткое описание в мини карточке товара */
add_action('woocommerce_after_shop_loop_item_title','woocommerce_template_single_excerpt', 5);
//убираем количество товаров в скобках в категориях
add_filter('woocommerce_subcategory_count_html','remove_count');
function remove_count(){
$html='';
return $html;
}
// Автоматическое обновлении корзины, при изменении количества товаров
// Нельзя убирать input «Обновить», если он не нужен его надо просто скрыть display: none, без него обновление не работает
add_action( 'wp_footer', 'cart_update_qty_script' );
function cart_update_qty_script() {
if (is_cart()) : ?>
<script>
jQuery('div.woocommerce').on('change', '.qty', function(){
jQuery("[name='update_cart']").trigger("click");
});
</script>
<?php endif; }
// Сортировка товаров WooCommerce, нет в наличии ставим в конец перечня товаров, отвалилась корзина
add_action( 'pre_get_posts', 'mik_exclude_category' );
function mik_exclude_category( $query ) {
if ( $query->is_main_query() ) {
$query->set( 'meta_key', '_stock_status' );
$query->set( 'orderby', array('meta_value' => 'ASC', 'date' => 'DESC') );
}
}
// или такая еще сортировка
/*
* Добавление опции сортировки
*/
add_filter( 'woocommerce_default_catalog_orderby_options', 'truemisha_new_orderby_option', 25 );
add_filter( 'woocommerce_catalog_orderby', 'truemisha_new_orderby_option', 25 );
function truemisha_new_orderby_option( $sortby ) {
$sortby[ 'vnalichii' ] = 'Сначала товары в наличии';
return $sortby;
}
/*
* Осуществление сортировки
*/
add_filter( 'woocommerce_get_catalog_ordering_args', 'truemisha_sort_by_stock', 25 );
function truemisha_sort_by_stock( $args ) {
if ( isset( $_GET['orderby'] ) && 'vnalichii' == $_GET['orderby'] ) {
$args[ 'meta_key' ] = '_stock_status';
$args[ 'orderby' ] = 'meta_value';
$args[ 'order' ] = 'ASC';
}
return $args;
}
/**
* Добавляем поле количество товаров перед кнопкой Купить на страницу архивов. Работает с Oxygen
*/
function custom_quantity_field_archive() {
$product = wc_get_product( get_the_ID() );
if ( ! $product->is_sold_individually() && 'variable' != $product->product_type && $product->is_purchasable() && $product->is_in_stock() ) {
woocommerce_quantity_input( array( 'min_value' => 1, 'max_value' => $product->backorders_allowed() ? '' : $product->get_stock_quantity() ) );
}
}
add_action( 'woocommerce_after_shop_loop_item', 'custom_quantity_field_archive', 9 );
function custom_add_to_cart_quantity_handler() {
wc_enqueue_js( '
jQuery( ".product-type-simple" ).on( "click", ".quantity input", function() {
return false;
});
jQuery( ".product-type-simple" ).on( "change input", ".quantity .qty", function() {
var add_to_cart_button = jQuery( this ).parents( ".product" ).find( ".add_to_cart_button" );
// For AJAX add-to-cart actions
add_to_cart_button.attr( "data-quantity", jQuery( this ).val() );
// For non-AJAX add-to-cart actions
//add_to_cart_button.attr( "href", "?add-to-cart=" + add_to_cart_button.attr( "data-product_id" ) + "&quantity=" + jQuery( this ).val() );
});
' );
}
add_action( 'init', 'custom_add_to_cart_quantity_handler' );
//количество товаров на странице
add_filter( 'loop_shop_per_page', 'bbloomer_redefine_products_per_page', 9999 );
function bbloomer_redefine_products_per_page( $per_page ) {
$per_page = 200;
return $per_page;
}
Заменить кнопку Купить
// Заменить кнопки Купить в карточке товара
add_filter( 'woocommerce_product_single_add_to_cart_text', 'bryce_add_to_cart_text' );
function bryce_add_to_cart_text() {
return __( 'Заказать', 'your-slug' );
}
// Заменить кнопки Купить на странице каталога товаров
add_filter( 'woocommerce_product_add_to_cart_text' , 'custom_woocommerce_product_add_to_cart_text' );
function custom_woocommerce_product_add_to_cart_text() {
global $product;
$product_type = $product->product_type;
switch ( $product_type ) {
case 'external':
return __( 'Take me to their site!', 'woocommerce' );
break;
case 'grouped':
return __( 'VIEW THE GOOD STUFF', 'woocommerce' );
break;
case 'simple':
return __( 'Заказать', 'woocommerce' );
break;
case 'variable':
return __( 'Выбрать', 'woocommerce' );
break;
default:
return __( 'Read more', 'woocommerce' );
}
}