/ Плагины / Настраиваем woocommerce

Настраиваем woocommerce

HIT

23.04.2016

12270

8

Настраиваем различные аспекты плагина woocommerce, под текущие задачи.

Ваша корзина пуста

Шаблон для настроек страницы корзины (когда она пуста) находится в папке woocommerce (локализованная в теме)/cart/cart-empty.php

Можно отцентрировать и добавить какое-либо изображение. Например:

Лэйбл «Распродажа»

Чтобы изменить слово «Распродажа» — надо отредактировать перевод woocommerce.

Проценты скидки

// Добавляем значение сэкономленных процентов рядом с ценой у товаров
add_filter( 'woocommerce_sale_price_html', 'woocommerce_custom_sales_price', 10, 2 );
function woocommerce_custom_sales_price( $price, $product ) {
	$percentage = round( ( ( $product->regular_price - $product->sale_price ) / $product->regular_price ) * 100 );
	return $price . sprintf( __(' Скидка %s', 'woocommerce' ), $percentage . '%' );
}

Изменение кнопок, ссылки, хлебные крошки

Добавляем в functions.php

// Изменить текст кнопки «Добавить в корзину» в шаблоне категорий
add_filter( 'woocommerce_product_add_to_cart_text', 'woo_archive_custom_cart_button_text' );    // 2.1 +
function woo_archive_custom_cart_button_text() {
	return __( 'В корзину', 'woocommerce' );
}


// Изменить текст кнопки «Добавить в корзину» в шаблоне карточки товара
add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_custom_single_add_to_cart_text' );  // 2.1 +
function woo_custom_single_add_to_cart_text() {
    return __( 'В корзину', 'woocommerce' );
}


// Изменить ссылку на кнопке "Вернутся в магазин" из корзины когда она пуста
function wc_empty_cart_redirect_url() {
	return '/katalog-tovarov/';
}
add_filter( 'woocommerce_return_to_shop_redirect', 'wc_empty_cart_redirect_url' );

Товары без цены

Для простых товаров:

// Если у товара нет цены, то выводить:
add_filter('woocommerce_empty_price_html', 'custom_call_for_price');
function custom_call_for_price() {
	return 'Уточните цену по телефону';
}

Для вариативных (и простых) товаров:

// Variable and simple product displayed prices
add_filter( 'woocommerce_get_price_html', 'empty_and_zero_price_html', 20, 2 );
function empty_and_zero_price_html( $price, $product ) {
    $empty_price = __('Уточните цену', 'woocommerce');

    if( $product->is_type('variable') ) {
        $prices = $product->get_variation_prices( true );

        if ( empty( $prices['price'] ) ) {
            return $empty_price; // <=== HERE below for empty price
        } else {
            $min_price     = current( $prices['price'] );
            $max_price     = end( $prices['price'] );
            if ( $min_price === $max_price && 0 == $min_price ) {
                return $empty_price; // <=== HERE for zero price
            }
            elseif ( $min_price !== $max_price && 0 == $min_price ) {
                return wc_price( $max_price );
            }
        }
    }
    elseif( $product->is_type('simple') ) {
        if ( '' === $product->get_price() || 0 == $product->get_price() ) {
            return $empty_price; // <=== HERE for empty and zero prices
        }
    }
    return $price;
}

// Product Variation displayed prices
add_filter( 'woocommerce_available_variation', 'empty_and_zero_variation_prices_html', 10, 3);
function empty_and_zero_variation_prices_html( $data, $product, $variation ) {

    if( '' === $variation->get_price() || 0 == $variation->get_price() )
        $data['price_html'] = __('Уточните цену', 'woocommerce'); // <=== HERE for empty and zero prices

    return $data;
}

Кнопки в корзине

Очистить корзину:

// Добавить кнопку «Отчистить корзину» на страницу Корзина
add_action( 'woocommerce_cart_actions', 'insert_empty_cart_button', 40 );
function insert_empty_cart_button() {
    global $woocommerce;
    echo '<a class="button" href="'. $woocommerce->cart->get_cart_url .'?empty-cart">Очистить корзину</a>';
}

// проверяем параметр empty-cart для очистки корзины
add_action( 'init', 'woocommerce_clear_cart_url' );
function woocommerce_clear_cart_url() {
	global $woocommerce;
	if ( isset( $_GET['empty-cart'] ) ) {
		$woocommerce->cart->empty_cart();
	}
}

Продолжить покупки:

// Добавляем кнопку «Продолжить покупки» на страницу оформления 
function checkout_more_buttons() {
	echo '<a id="cont-buy" href="javascript:history.back()"><i class="fa fa-angle-left" aria-hidden="true"></i>Продолжить покупки</a>';
}
add_action ('woocommerce_review_order_before_submit', 'checkout_more_buttons', 5);

 
// Добавляем кнопку «Продолжить покупки» на страницу корзины
function cart_more_buttons() {
	echo '<a id="cont-buy" href="javascript:history.back()"><i class="fa fa-angle-left" aria-hidden="true"></i>Продолжить покупки</a>';
}
add_action ('woocommerce_after_cart_totals', 'cart_more_buttons', 5);
href=»javascript:history.back()» — возврат на предыдущую страницу

Можно вернутся на две страницы назад — для этого ставим эквивалентную команду history.go(-1)
и меняем на необходимое количество: href=»javascript:history.go(-2)»

Товар без цены, товар которого нет в наличие

Данные код выдает фатальную ошибку. Необходимо доработать!
Не работает с мини-корзиной ajax

Чтобы не отображать товар, которого нет в наличие. Нужно в настройках Woocommerce/Товары/Запасы поставить соответствующую галку Спрятать отсутствующие товары из каталога.

Чтобы спрятать кнопки у товаров, которых нет в наличие и товаров без цены

if (!function_exists('woocommerce_template_loop_add_to_cart')) {
	function woocommerce_template_loop_add_to_cart() {
		global $product;
		if ( ! $product->is_in_stock() || ! $product->is_purchasable() ) return;
		woocommerce_get_template('loop/add-to-cart.php');
	}
}

Чтобы изменить кнопки у товаров с отсутствующей ценой и которых нет в наличие

if (!function_exists('woocommerce_template_loop_add_to_cart')) {
	function woocommerce_template_loop_add_to_cart() {
		global $product;
		if (!$product->is_purchasable()) { 
			echo '<a class="outstock_button" href="'.get_permalink().'" rel="nofollow">Уточните цену</a>';
		} elseif (!$product->if (!$product->is_purchasable()) {echo '<a class="outstock_button" href="'.get_permalink().'" rel="nofollow">Нет в наличие</a>';}) {
			echo '<a class="outstock_button" href="'.get_permalink().'" rel="nofollow">Contact Us</a>';
		} else { woocommerce_get_template('loop/add-to-cart.php'); }
	}
}

Скрыть товары у которых нет цены

add_action( 'woocommerce_product_query', 'react2wp_hide_products_without_price' );
function react2wp_hide_products_without_price( $q ){
   $meta_query = $q->get( 'meta_query' );
   $meta_query[] = array(
      'key'       => '_price',
      'value'     => '',
      'compare'   => '!='
   );
   $q->set( 'meta_query', $meta_query );
}

Символ рубля

// Возвращаем нормальное отображение рубля руб. (или можно поставить символ рубля font-awesome)
add_filter('woocommerce_currency_symbol', 'change_existing_currency_symbol', 10, 2);
function change_existing_currency_symbol( $currency_symbol, $currency ) {
	switch( $currency ) {
		case 'RUB': $currency_symbol = ' <i class="fa fa-rub"></i>'; break;
	}
	return $currency_symbol;
}

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

  • Похожие записи
  • Комментарии
  • Вложения
Изменение формы выбора вариаций

Изменение формы выбора вариаций

По умолчанию вариации товара в Woocommerce выбираются из выпадающего списка. Это не всегда удобно. Доработать формы выбора вариаций в виде: изображений, цветов, надписей (лэйблов) и т.д. помогут плагины. Рассмотрим различные Читать далее »

/
WooCommerce AJAX Products Filter

WooCommerce AJAX Products Filter

Раннее данный фильтр участвовал в общем обзоре, в котором я приводил основные особенности. Рассмотрим подробнее работу с фильтром WooCommerce AJAX Products Filter (также он называется Advanced AJAX Product Filters). Работа Читать далее »

/
Metabox woocommerce

Metabox woocommerce

У плагина woocommerce есть набор дополнительных полей при редактировании товара. При необходимости можно в группы полей WC добавить свои произвольные metabox. Должно получится так: Создание и отображение metabox Первый экшн Читать далее »

/

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

8 комментариев

  1. Алексей

    Куда нужно вставить этот код : Проценты скидки

    // Добавляем значение сэкономленных процентов рядом с ценой у товаров

    add_filter( ‘woocommerce_sale_price_html’, ‘woocommerce_custom_sales_price’, 10, 2 );
    function woocommerce_custom_sales_price( $price, $product ) {
    $percentage = round( ( ( $product->regular_price — $product->sale_price ) / $product->regular_price ) * 100 );

    return $price . sprintf( __(‘ Скидка %s’, ‘woocommerce’ ), $percentage . ‘%’ );
    }

  2. сергей

    Как вывести товары по меткам? Допустим несколько товаров имеют метку — какашка, а другие — моча. Надо чтобы над товарами можно было выбрать, моча или какашка, и да, если будут еще метки то надо чтобы предыдущие значения запомнились, допустим — какашка , коричневая

    1. Alexandr

      Ну и примеры у вас). Данную задачу можно решить разными способами:
      1. Фильтром (WooCommerce Products Filter, YITH WooCommerce Ajax Product Filter).
      2. Дополнительным вызовом — по типу как здесь. Но для товаров woocommerce еще так не делал.
      3. Локально можно вывести товары по меткам шорткодом

  3. Дмитрий

    Доброй ночи. Подскажите, а как сделать сортировку по наличию товара?

    1. Alexandr

      Вынес пользовательские варианты сортировки в отдельную статью. Дополнил вариантом сортировки по наличию.

  4. Dexploit

    Чтобы изменить кнопки у товаров с отсутствующей ценой и которых нет в наличие — скопировал код, поставил. Фатальная ошибка 🙂
    Пишет о синтаксической ошибке в строке с elseif, ругается на {

    Как поправить?

    1. Alexandr

      Да вы правы! Фатальная ошибка.. Спасибо за замечание. Постараюсь на днях доработать этот код и внести исправления.

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