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

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

HIT

23.04.2016

12383

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

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

  • Похожие записи
  • Комментарии
  • Вложения
Новинка (товар NEW полем)

Новинка (товар NEW полем)

Ранее были рассмотрены варианты добавления лэйбла New полуавтоматическим способом (последние созданные товары, либо по времени от текущего), либо назначением метки NEW. Здесь разберем как сделать данный функционал полем и какие Читать далее »

/
Настройка полей заказчика

Настройка полей заказчика

При заказе товара необходимо заполнить данные покупателя (имя, телефон, адрес доставки и т.д.). В стандартном варианте поля эти несколько «раздуты», много лишнего, требуется некоторое оформление. Можно использовать плагин Saphali Woocommerce Читать далее »

/
Лэйблы используя PHP

Лэйблы используя PHP

Как делать создание лэйблов налету средствами jQuery используя post_class описано здесь. В данной статье сделаем вывод подобных лэйблов средствами WordPress (PHP). Данный способ даст более гибкий и универсальный подход к Читать далее »

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

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
Gutenberg
Рекомендации для васGutenbergOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.