• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!

Важно! 50 полезных сниппетов для WooCommerce. Часть первая.

Image CMS

r_z_r

Новичок
#41
Добрый день, пытаюсь сделать дополнительное поле для вариации по примеру, поле выводится в админке, но вот при сохранении оно не сохраняется. Версия 2,4,4.
Подскажите в какую сторону копать
 

Acme

Форумчанин
#44
functions.php относиться не к плагину, но к вашей теме, т.е. здесь
\wp-content\themes\ИмяВашейТемы\functions.php
Спасибо.

Добавил в конце этого файла этот код:
Код:
/**
* Change the add to cart text on single product pages
*/
add_filter('single_add_to_cart_text', 'woo_custom_cart_button_text');

function woo_custom_cart_button_text() {

    global $woocommerce;
 
    foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
 
        if( get_the_ID() == $_product->id ) {
            return __('Already in cart - Add Again?', 'woocommerce');
        }
    }
 
    return __('Add to cart', 'woocommerce');
}

/**
* Change the add to cart text on product archives
*/
add_filter( 'add_to_cart_text', 'woo_archive_custom_cart_button_text' );

function woo_archive_custom_cart_button_text() {

    global $woocommerce;
 
    foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
 
        if( get_the_ID() == $_product->id ) {
            return __('Already in cart', 'woocommerce');
        }
    }
 
    return __('Add to cart', 'woocommerce');
}
Никаких изменений не увидел. В чем может быть проблема? Версия WC последняя.
Screan:
 

searchingman

Гуру
Местный
#45
Спасибо.

Добавил в конце этого файла этот код:
Код:
/**
* Change the add to cart text on single product pages
*/
add_filter('single_add_to_cart_text', 'woo_custom_cart_button_text');

function woo_custom_cart_button_text() {

    global $woocommerce;

    foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];

        if( get_the_ID() == $_product->id ) {
            return __('Already in cart - Add Again?', 'woocommerce');
        }
    }

    return __('Add to cart', 'woocommerce');
}

/**
* Change the add to cart text on product archives
*/
add_filter( 'add_to_cart_text', 'woo_archive_custom_cart_button_text' );

function woo_archive_custom_cart_button_text() {

    global $woocommerce;

    foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];

        if( get_the_ID() == $_product->id ) {
            return __('Already in cart', 'woocommerce');
        }
    }

    return __('Add to cart', 'woocommerce');
}
Никаких изменений не увидел. В чем может быть проблема? Версия WC последняя.
Screan:
В последних версиях WooCommerce изменились названия фильтров.
Поэтому для WooCommerce 2.4.5 правильно будет так.
PHP:
/**
* Изменить текст кнопки "Добавить в корзину", если товар добавлен на странице товара
*/
add_filter('woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text');

function woo_custom_cart_button_text() {

    global $woocommerce;
    foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
        if( get_the_ID() == $_product->id ) {
            return 'Уже в корзине. Добавить?';
        }
    }
    return __('Add to cart', 'woocommerce');
}   

/**
* Изменить текст кнопки "Добавить в корзину", если товар добавлен на странице каталога
*/
add_filter( 'woocommerce_product_add_to_cart_text', 'woo_archive_custom_cart_button_text' );

function woo_archive_custom_cart_button_text() {

    global $woocommerce;
    foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
        if( get_the_ID() == $_product->id ) {
            return 'Уже в корзине. Добавить?';
        }
    }
    return __('Add to cart', 'woocommerce');
}
 

Acme

Форумчанин
#46
В последних версиях WooCommerce изменились названия фильтров.
Поэтому для WooCommerce 2.4.5 правильно будет так.
PHP:
/**
* Изменить текст кнопки "Добавить в корзину", если товар добавлен на странице товара
*/
add_filter('woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text');

function woo_custom_cart_button_text() {

    global $woocommerce;
    foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
        if( get_the_ID() == $_product->id ) {
            return 'Уже в корзине. Добавить?';
        }
    }
    return __('Add to cart', 'woocommerce');
} 

/**
* Изменить текст кнопки "Добавить в корзину", если товар добавлен на странице каталога
*/
add_filter( 'woocommerce_product_add_to_cart_text', 'woo_archive_custom_cart_button_text' );

function woo_archive_custom_cart_button_text() {

    global $woocommerce;
    foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
        if( get_the_ID() == $_product->id ) {
            return 'Уже в корзине. Добавить?';
        }
    }
    return __('Add to cart', 'woocommerce');
}
А можете подсказать, что у них изменилось? Дабы устанавливая следующие дополнения - не возникло вопросов.




---------------------------------------------------------------------------------------------------

После установки такая проблема появилась, после того как захотел удалить из корзины файл:
Warning: Cannot modify header information - headers already sent by (output started at **\functions.php:1) in **wp-includes\pluggable.php on line 1207

Первый раз установил - не отображался текст. Изменил кодировку файла на UTF-8. Но это, как я понимаю, не могло повлиять.
 

Acme

Форумчанин
#48
На теме storefront вот так выглядит
- в каталоге http://take.ms/bWeiU
- в карточке товара http://take.ms/plpSN
Не совсем это имел ввиду. Я хотел узнать, что в коде у них изменилось. Поскольку, если я правильно понял, взяв любой следующий код, к примеру, под номером 7 - Заменить «Товар отсутствует» на «Продано» и вставив его в function.php - он не сработает. Что в самом коде нужно заменять, какие переменные в новом обновлении WC поменялись?
 

searchingman

Гуру
Местный
#49
Не совсем это имел ввиду. Я хотел узнать, что в коде у них изменилось. Поскольку, если я правильно понял, взяв любой следующий код, к примеру, под номером 7 - Заменить «Товар отсутствует» на «Продано» и вставив его в function.php - он не сработает. Что в самом коде нужно заменять, какие переменные в новом обновлении WC поменялись?
Изменилось название хуков и текст для кнопок.
 
#50
Друзья, подскажите как исправить сниппет "Минимальная сумма заказа"? Он считается вместе с доставкой. :(
А может плагин есть?
 
#51
Вот рабочий вариант сниппета для Минимальной суммы заказа. Согласны?
PHP:
// Set a minimum dollar amount per order
add_action( 'woocommerce_check_cart_items', 'spyr_set_min_total' );
function spyr_set_min_total() {
    // Only run in the Cart or Checkout pages
    if( is_cart() || is_checkout() ) {
        global $woocommerce;

        // Set minimum cart total
        $minimum_cart_total = 10;

        // Total we are going to be using for the Math
        // This is before taxes and shipping charges
        $total = WC()->cart->subtotal;
      
        // Compare values and add an error is Cart's total
        // happens to be less than the minimum required before checking out.
        // Will display a message along the lines of
        // A Minimum of 10 USD is required before checking out. (Cont. below)
        // Current cart total: 6 USD
        if( $total <= $minimum_cart_total  ) {
            // Display our error message
            wc_add_notice( sprintf( '<strong>A Minimum of %s %s is required before checking out.</strong>'
                .'<br />Current cart\'s total: %s %s',
                $minimum_cart_total,
                get_option( 'woocommerce_currency'),
                $total,
                get_option( 'woocommerce_currency') ),
            'error' );
        }
    }
}
Вот этого кода и рассчета не хватает "Для оформления заказа не хватает N руб.". Как сделать?
 

searchingman

Гуру
Местный
#52
Вот рабочий вариант сниппета для Минимальной суммы заказа. Согласны?
PHP:
// Set a minimum dollar amount per order
add_action( 'woocommerce_check_cart_items', 'spyr_set_min_total' );
function spyr_set_min_total() {
    // Only run in the Cart or Checkout pages
    if( is_cart() || is_checkout() ) {
        global $woocommerce;

        // Set minimum cart total
        $minimum_cart_total = 10;

        // Total we are going to be using for the Math
        // This is before taxes and shipping charges
        $total = WC()->cart->subtotal;
     
        // Compare values and add an error is Cart's total
        // happens to be less than the minimum required before checking out.
        // Will display a message along the lines of
        // A Minimum of 10 USD is required before checking out. (Cont. below)
        // Current cart total: 6 USD
        if( $total <= $minimum_cart_total  ) {
            // Display our error message
            wc_add_notice( sprintf( '<strong>A Minimum of %s %s is required before checking out.</strong>'
                .'<br />Current cart\'s total: %s %s',
                $minimum_cart_total,
                get_option( 'woocommerce_currency'),
                $total,
                get_option( 'woocommerce_currency') ),
            'error' );
        }
    }
}
Вот этого кода и рассчета не хватает "Для оформления заказа не хватает N руб.". Как сделать?
Попробуйте такой код в functions.php вашей темы :
PHP:
// Ограничение по минимальной сумме при покупке товаров
add_action( 'woocommerce_check_cart_items', 'spyr_set_min_total' );
function spyr_set_min_total() {
    if( is_cart() || is_checkout() ) {
        global $woocommerce;

        // минимальная сумма
        $minimum_cart_total = 10000;

        // сумма из корзины
        $total = WC()->cart->subtotal;
     
        // Сообщение об ошибке при меньшей сумме в корзине, чем лимит
        if( $total <= $minimum_cart_total  ) {
            // Display our error message
            $not_enough_summa = $minimum_cart_total - $total;
            wc_add_notice( sprintf( 'Минимальная сумма заказа: %s'
                .'<br>Для оформления заказа не хватает: %s',
                wc_price($minimum_cart_total),
                wc_price($not_enough_summa)
                ),
            'error' );
        }
    }
}
Пример для темы storefront:
- страница корзины http://take.ms/V6DMQ
- страница оформления заказа http://take.ms/xKBmP
 

searchingman

Гуру
Местный
#54
Друзья, подскажите как исправить сниппет "Минимальная сумма заказа"? Он считается вместе с доставкой. :(
В предыдущем примере можно оперировать разными суммами:
- WC()->cart->total - общая сумма заказа в корзине
- WC()->cart->subtotal - сумма заказа без учета доставки в корзине
- WC()->cart->shipping_total - сумма доставки в корзине
 

chusika

Новичок
#56
Мне нужен редирект со всех кнопок сайта "Добавить в корзину" при нажатии сразу на корзину. (ПРичем у меня корзина и чекаут объединены)
Ставлю данный код в functions.php
Код:
add_filter ('add_to_cart_redirect', 'redirect_to_checkout');

function redirect_to_checkout() {
    global $woocommerce;
    $checkout_url = $woocommerce->cart->get_checkout_url();
    return $checkout_url;
}
и редирект работает только с кнопок карточки товара. С каталога и с главной при нажатии происходит все как обычно, то есть вот такой вид (редиректа нет):
upload_2015-9-11_14-29-4.png
Ребят помогите!
 

chusika

Новичок
#57
Мне нужен редирект со всех кнопок сайта "Добавить в корзину" при нажатии сразу на корзину. (ПРичем у меня корзина и чекаут объединены)
Ребят помогите!
Все я нашла ответ на вопрос. Оказывается теперь прямо из админки все делается.....
Woocommerce --> Settings --> Products --> Display --> Redirect to the cart page after successful addition (поставить галку)
 

kvo

Форумчанин
#58
Подскажите как скрыть или запретить изменение количества товара при покупке? Он всегда один.
 
#59
Здравствуйте. Вставляю код 2. Дополнительные товары на странице/в ряду. А он не работает. В чем может быть причина?
Шаблон starfront+boutique
Решил проблему руками. В файле content-product.php исправил следующее:

$woocommerce_loop['columns'] = 4;//apply_filters( 'loop_shop_columns', 4 ); костыль!

4 отвечает за количество товаров в строке, но стиль правится отдельно.
Может кому пригодится.
 
Последнее редактирование:
#60
"5. Исключить категорию из виджета woocommerce -категории" Подскажите пожалуйста, как это сделать пошагово. Интернет-магазин пока на Денвере, WordPress 4.3.1 с темой оформления Storefront 1.5.1. Я сама абсолютный и древний чайник, поэтому прошу подробно и пошагово :))) Заранее благодарна!!!!