Настраиваем различные аспекты плагина 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);
Можно вернутся на две страницы назад — для этого ставим эквивалентную команду history.go(-1)
и меняем на необходимое количество: href=»javascript:history.go(-2)»
Товар без цены, товар которого нет в наличие
Чтобы не отображать товар, которого нет в наличие. Нужно в настройках 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;
}
[site-socialshare]
Куда нужно вставить этот код : Проценты скидки
// Добавляем значение сэкономленных процентов рядом с ценой у товаров
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
Как вывести товары по меткам? Допустим несколько товаров имеют метку — какашка, а другие — моча. Надо чтобы над товарами можно было выбрать, моча или какашка, и да, если будут еще метки то надо чтобы предыдущие значения запомнились, допустим — какашка , коричневая
Ну и примеры у вас). Данную задачу можно решить разными способами:
1. Фильтром (WooCommerce Products Filter, YITH WooCommerce Ajax Product Filter).
2. Дополнительным вызовом — по типу как здесь. Но для товаров woocommerce еще так не делал.
3. Локально можно вывести товары по меткам шорткодом
Доброй ночи. Подскажите, а как сделать сортировку по наличию товара?
Вынес пользовательские варианты сортировки в отдельную статью. Дополнил вариантом сортировки по наличию.
Чтобы изменить кнопки у товаров с отсутствующей ценой и которых нет в наличие — скопировал код, поставил. Фатальная ошибка 🙂
Пишет о синтаксической ошибке в строке с elseif, ругается на {
Как поправить?
Да вы правы! Фатальная ошибка.. Спасибо за замечание. Постараюсь на днях доработать этот код и внести исправления.