menex.ru
← Все статьи

Woocommerce полезные хуки

15.08.2019 • Теги: #hook #woocommerce #wordpress #Хук

При работе с плагином 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' );
    }

}