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

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

HIT

23.04.2016

11891

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;
}

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

  • Похожие записи
  • Комментарии
  • Вложения
Upgrade WC

Upgrade WC

Очередная серия улучшений (upgrade) плагина WC. Буду добавлять по мере изучения новые решения. Поиск по SKU (артикулу) Из коробки WC не ищет по артикулам (SKU). Но достаточно установить плагин Search Читать далее »

/
Колесо удачи для интернет-магазина

Колесо удачи для интернет-магазина

Добавим на интернет-магазин возможность посетителям проверить свою удачу посредством колеса удачи. Колесо представляет собой барабан с секторами с разными вариантами скидок, либо отсутствия их. Lucky Wheel for WooCommerce – Spin Читать далее »

Woo Discount Rules PRO

Woo Discount Rules PRO

Обозреваем плагин Woo Discount Rules PRO, конфигурации акций и различные настройки плагина. Каждый второй товар бесплатно Сделаем категорию (например Компакт диски) в которой каждый второй товар будет бесплатным. Если товары Читать далее »

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

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 минут.