14 полезных сниппетов для интернет-магазинов на Вукоммерс

Сегодня я хочу поделиться несколькими полезными сниппетами для Вукоммерс, которые помогут сделать торговлю ещё проще и удобнее.

Напомню, Вукоммерс — прекрасный плагин электронной торговли для Вордпресс, который позволяет без особых сложностей и абсолютно бесплатно превратить любой Вордпресс-сайт в полноценный интернет-магазин. В WooCommerce прием платежей реализуется с помощью плагинов.

Все сниппеты традиционно размещаются в файле functions.php активной в данный момент темы или выносятся в отдельный плагин, если тема не постоянна.

Заменить «хлебные крошки» WooCommerce на крошки Yoast SEO

Yoast SEO — отличный плагин поисковой оптимизации с массой полезных функций, в т.ч. продвинутыми «хлебными крошками», которые можно задействовать вместо стандартных.

if ( ! function_exists( 'evolution_replace_breadcrumbs' ) ) :
/**
 * Replace WooCommerce Breadcrumbs with Yoast breadcrumbs
 */
function evolution_replace_breadcrumbs() {
	remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20, 0);
	function evolution_yoast_breadcrumb() {
		if ( function_exists('yoast_breadcrumb') ) { 
			yoast_breadcrumb('<nav class="woocommerce-breadcrumb">','</nav>');
		}
	}
}
add_action( 'init', 'evolution_replace_breadcrumbs' );
endif;

Изменить количество товаров в строке

По-умолчанию в Вукоммерс отображается по четыре товара в строке, исправить это проще простого.

/**
 * Change number of products per row to 3
 */ 
if (!function_exists('evolution_loop_columns') ) {
    function evolution_loop_columns() {
        return 3; // 3 Products in a row
    }
}
add_filter('loop_shop_columns', 'evolution_loop_columns');

Изменить количество сопутствующих продуктов

Теперь вы можете самостоятельно устанавливать количество сопутствующих продуктов.

/**
 * WooCommerce Extra Feature
 * --------------------------
 *
 * Change number of related products on product page
 * Set your own value for 'posts_per_page'
 *
 */ 
if (!function_exists('evolution_related_products_args') ) {

    function evolution_related_products_args( $args ) {

        $args['posts_per_page'] = 4; // 4 related products
        $args['columns'] = 4; // All four in a row
        return $args;
        
    }
}
add_filter( 'woocommerce_output_related_products_args', 'evolution_related_products_args' );

Изменить количество продуктов на странице

Иногда без этого никак.

/**
 * Custom Product Cols
 * @return 12 Products per Page
 */
if (!function_exists('evolution_loop_shop_per_page') ) {

    function evolution_loop_shop_per_page( $cols ) {

        $cols = 12;
        return $cols;

    }
}
add_filter( 'loop_shop_per_page', 'evolution_loop_shop_per_page', 20 );

Скрыть платные способы доставки, если доступна бесплатная доставка

Скрываем платные способы доставки на странице оформления заказа, если покупателю доступна бесплатная доставка.

/**
 * Hide shipping rates when free shipping is available.
 * Updated to support WooCommerce 2.6 Shipping Zones.
 *
 * @param array $rates Array of rates found for the package.
 * @return array
 */
if (!function_exists('evolution_hide_shipping_when_free_is_available') ) {

    function evolution_hide_shipping_when_free_is_available( $rates ) {
        $free = array();
        foreach ( $rates as $rate_id => $rate ) {
            if ( 'free_shipping' === $rate->method_id ) {
                $free[ $rate_id ] = $rate;
                break;
            }
        }
        return ! empty( $free ) ? $free : $rates;
    }
}
add_filter( 'woocommerce_package_rates', 'evolution_hide_shipping_when_free_is_available', 100 );

Загрузить файлы CSS и JavaScript только на страницах магазина

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

if (!function_exists( 'evolution_manage_woocommerce_styles' ) ) :
/**
* Optimize WooCommerce Scripts
* Removes WooCommerce styles and scripts from non WooCommerce pages.
*/  
function evolution_manage_woocommerce_styles() {

    //first check that woo exists to prevent fatal errors
    if ( function_exists( 'is_woocommerce' ) ) {

        //dequeue scripts and styles
        if ( ! is_woocommerce() && ! is_cart() && ! is_checkout() && ! is_account_page() ) {          
            wp_dequeue_style( 'woocommerce-layout' );
            wp_dequeue_style( 'woocommerce-smallscreen' );
            wp_dequeue_style( 'woocommerce-general' );
            wp_dequeue_style( 'evolution-woostyles' );
            wp_dequeue_script( 'wc_price_slider' );
            wp_dequeue_script( 'wc-single-product' );
            wp_dequeue_script( 'wc-add-to-cart' );
            wp_dequeue_script( 'wc-cart-fragments' );
            wp_dequeue_script( 'wc-checkout' );
            wp_dequeue_script( 'wc-add-to-cart-variation' );
            wp_dequeue_script( 'wc-single-product' );
            wp_dequeue_script( 'wc-cart' );
            wp_dequeue_script( 'wc-chosen' );
            wp_dequeue_script( 'woocommerce' );
            wp_dequeue_script( 'prettyPhoto' );
            wp_dequeue_script( 'prettyPhoto-init' );
            wp_dequeue_script( 'jquery-blockui' );
            wp_dequeue_script( 'jquery-placeholder' );
            wp_dequeue_script( 'fancybox' );
            wp_dequeue_script( 'jqueryui' );
        }
    }
}
add_action( 'wp_enqueue_scripts', 'evolution_manage_woocommerce_styles', 99 );
endif;

Сделать номер телефона необязательным к заполнению

По-умолчанию в Вукоммерс номер телефона покупателя обязателен к заполнению и исправить это никак нельзя. А вдруг у человека нет телефона, проблемы со слухом или он просто предпочитает общаться по электронной почте, например.

if (!function_exists( 'evolution_phone_no_pflicht' ) ) :
/**
 * Make the phone number an optional entry
 * 
 * @hooked woocommerce_billing_fields()
 * 
 * @return filter
 */
function evolution_phone_no_pflicht( $address_fields ) {
    
    $address_fields['billing_phone']['required'] = false;

    return $address_fields;
}
add_filter( 'woocommerce_billing_fields', 'evolution_phone_no_pflicht', 10, 1 );
endif;

Показать экономию в процентах

Просто еще один из трюков психологического воздействия на покупателя.

if ( !function_exists( 'evolution_custom_sales_price' ) ) :
/**
 * Show percent savings on sale - Only for WooCommerce version 3.0+
 * 
 * @add filter to products
 * 
 * @return filter
 */
function evolution_custom_sales_price( $price, $regular_price, $sale_price ) {
    
    $percentage = round( ( $regular_price - $sale_price ) / $regular_price * 100 ).'%';
    
    $percentage_txt = __(' Spare ', 'evolution' ).$percentage;
    
    $price = '<del>' . ( is_numeric( $regular_price ) ? wc_price( $regular_price ) : $regular_price ) . '</del> <ins>' . ( is_numeric( $sale_price ) ? wc_price( $sale_price ) . $percentage_txt : $sale_price . $percentage_txt ) . '</ins>';
    return $price;
    
}
add_filter( 'woocommerce_format_sale_price', 'evolution_custom_sales_price', 10, 3 );
endif;

Добавить кнопки шаринга на страницы продуктов

Дайте своим покупателям возможность делиться ссылками на продукты в соцсетях. Например, чтобы вывести кнопки плагина Shariff, можно воспользоваться кодом ниже.

if (!function_exists( 'evolution_share_for_woocommerce' ) ) :
/**
 * Implementing share buttons on the page of an individual product
 * 
 * @hooked woocommerce_share()
 */
function evolution_share_for_woocommerce() {

    echo do_shortcode( '[[shariff]]' );
}
add_action( 'woocommerce_share', 'evolution_share_for_woocommerce', 5 );
endif;

Другие кнопки подключаются аналогичным образом.

Удалить вкладки со страницы продукта

Иногда некоторые вкладки на страницах товара бывают лишними, скрыть их очень просто.

if (!function_exists( 'evolution_remove_product_tabs' ) ) :
/**
 * Removing the product tabs of the description 
 * 
 * @hooked woocommerce_product_tabs()
 */
function evolution_remove_product_tabs( $tabs ) {

    unset( $tabs['description'] ); // Remove the description tab
    unset( $tabs['reviews'] ); // Remove the reviews tab
    unset( $tabs['additional_information'] ); // Remove the additional information tab

    return $tabs;

}
add_filter( 'woocommerce_product_tabs', 'evolution_remove_product_tabs', 98 );
endif;

Обновить корзину с помощью аякса

Очень удобная для покупателей функция «живого» обновления корзины.

<?php if (!function_exists( 'evolution_header_add_to_cart_fragment' ) ) : 
/** 
 * Ensure cart contents update when products are added to the cart via AJAX 
 * 
 * @add_filter woocommerce_add_to_cart_fragments 
 */ 
function evolution_header_add_to_cart_fragment( $fragments ) { ob_start();
?>

<a class="cart-contents" href="<?php echo WC()->cart->get_cart_url(); ?>" title="<?php _e( 'View your shopping cart' ); ?>"><?php echo sprintf (_n( '%d item', '%d items', WC()->cart->get_cart_contents_count() ), WC()->cart->get_cart_contents_count() ); ?> - <?php echo WC()->cart->get_cart_total(); ?></a>

<?php
$fragments['a.cart-contents'] = ob_get_clean();
return $fragments;
}
add_filter( 'woocommerce_add_to_cart_fragments', 'evolution_header_add_to_cart_fragment' );
endif;

Вывести ссылку на личный кабинет покупателя

Ссылка умная — гостям предлагает войти или зарегистрироваться, а залогиненным выйти.

<?php if ( is_user_logged_in() ) { ?>
 	<a href="<?php echo get_permalink( get_option('woocommerce_myaccount_page_id') ); ?>" title="<?php _e('Mein Account','evolution'); ?>"><?php _e('My Account','woothemes'); ?></a>
 <?php } else { ?>
 	<a href="<?php echo get_permalink( get_option('woocommerce_myaccount_page_id') ); ?>" title="<?php _e('Login / Register','evolution'); ?>"><?php _e('Login / Register','woothemes'); ?></a>
 <?php } ?>

Включить в уведомление администратору информацию о способе оплаты

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

if (!function_exists( 'evolution_add_payment_method_to_admin_new_order' ) ) :
/**
 * Adding the customer's payment method to the admin email
 * 
 * @hooked woocommerce_email_after_order_table()
 */
function evolution_add_payment_method_to_admin_new_order( $order, $is_admin_email ) {
    
    if ( $is_admin_email ) {
        
        echo '<p><strong>Zahlungsart:</strong> ' . $order->payment_method_title . '</p>';
        
    }
}
add_action( 'woocommerce_email_after_order_table', 'evolution_add_payment_method_to_admin_new_order', 15, 2 );
endif;

Изменить порядок полей на странице оформления заказа

⚡️ Присоединяйтесь к моему телеграм-каналу! Рассказываю о своих рабочих буднях на фрилансе и делюсь полезными материалами по веб‑разработке.

Лишние поля можно скрыть при необходимости.

<?php if (!function_exists( 'evolution_reorder_woo_fields' ) ) :
/**
 * Alter the order of fields in the checkout area, or remove them completely.
 * 
 * @add_filter woocommerce_checkout_fields
 */
function evolution_reorder_woo_fields( $fields ) {
    
    //move these around in the order you'd like
    $fields2['billing']['billing_first_name'] = $fields['billing']['billing_first_name'];
    $fields2['billing']['billing_last_name']  = $fields['billing']['billing_last_name'];
    $fields2['billing']['billing_company']    = $fields['billing']['billing_company'];
    $fields2['billing']['billing_address_1']  = $fields['billing']['billing_address_1'];
    $fields2['billing']['billing_address_2']  = $fields['billing']['billing_address_2'];
    $fields2['billing']['billing_city']       = $fields['billing']['billing_city'];
    $fields2['billing']['billing_postcode']   = $fields['billing']['billing_postcode'];
    $fields2['billing']['billing_state']      = $fields['billing']['billing_state'];
    $fields2['billing']['billing_country']    = $fields['billing']['billing_country'];
    $fields2['billing']['billing_email']      = $fields['billing']['billing_email'];
    $fields2['billing']['billing_phone']      = $fields['billing']['billing_phone'];

    //just copying these (keeps the standard order)
    $fields2['shipping'] = $fields['shipping'];
    $fields2['account']  = $fields['account'];
    $fields2['order']    = $fields['order'];

    return $fields2;
}
add_filter( 'woocommerce_checkout_fields', 'evolution_reorder_woo_fields' );
endif;

Если не хотите копаться в коде Вордпресс, можно пойти другим путём — воспользоваться сервисом «1С-UMI» и создать интернет магазин самому. Зарегистрируйтесь на сервисе и вы поймете, что сделать готовый интернет-магазин под ключ бесплатно, не прилагая особых усилий, действительно возможно.

По материалам сайта Noupe.com
Иван Данилин
Автор Иван Данилин

Делаю сайты на Вордпресс с 2008 года, в том числе уникальные инструменты для решения сложных бизнес‑задач.

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