• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

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

seomur

Новичок
Кстати, сниппет № 16. Изменить электронный адрес отправителя в поле «от кого»
полностью выглядит так:

PHP:
function woo_custom_wp_mail_from() {
        global $woocommerce;
        return html_entity_decode( 'your@email.com' );
}
add_filter( 'wp_mail_from', 'woo_custom_wp_mail_from', 99 );

Но я бы хотел сделать так, чтобы в качестве электронного адреса отправителя передавался e-mail заказчика, который он сам ввел в поле.
Пытался вот так:

PHP:
function woo_custom_wp_mail_from($order) {
global $woocommerce;
return $order->billing_email;
}
add_filter( 'wp_mail_from', 'woo_custom_wp_mail_from', 99 );

Но не работает... Подскажите, как мне это сделать?

http://spigotdesign.com/change-woocommerce-new-order-reply-address-customer/#comment-95843
 

Ahazhgir

Новичок
Попробуйте такой код в 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

Подскажите как установить разную минимальную сумму заказа для разных категорий товаров, Такое реализовать возможно?
 

Яна Шолойко

Новичок
Добрый день. Мне нужно было добавить в статус товара пункт "Под заказ", на Вашем форуме я нашла код
Код:
function add_custom_stock_type() {
    ?>
    <script type="text/javascript">
    jQuery(function(){
        jQuery('._stock_status_field').not('.custom-stock-status').remove();
    });
    </script>
    <?php 

    woocommerce_wp_select( array( 'id' => '_stock_status', 'wrapper_class' => 'hide_if_variable custom-stock-status', 'label' => __( 'Stock status', 'woocommerce' ), 'options' => array(
        'instock' => __( 'In stock', 'woocommerce' ),
        'outofstock' => __( 'Out of stock', 'woocommerce' ),
        'onrequest' => __( 'под заказ', 'woocommerce' ), // The new option !!!
    ), 'desc_tip' => true, 'description' => __( 'Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce' ) ) );
}
add_action('woocommerce_product_options_stock_status', 'add_custom_stock_type');
function save_custom_stock_status( $product_id ) {
    update_post_meta( $product_id, '_stock_status', wc_clean( $_POST['_stock_status'] ) );
}
add_action('woocommerce_process_product_meta', 'save_custom_stock_status',99,1);

function woocommerce_get_custom_availability( $data, $product ) {
    switch( $product->stock_status ) {
        case 'instock':
            $data = array( 'availability' => __( 'In stock', 'woocommerce' ), 'class' => 'in-stock' );
        break;
        case 'outofstock':
            $data = array( 'availability' => __( 'Out of stock', 'woocommerce' ), 'class' => 'out-of-stock' );
        break;
        case 'onrequest':
            $data = array( 'availability' => __( 'под заказ', 'woocommerce' ), 'class' => 'on-request' );
        break;
    }
    return $data;
}
add_action('woocommerce_get_availability', 'woocommerce_get_custom_availability', 10, 2);
он мне помог, но не совсем. Хотелось бы сделать так, что бы при статусе "Под заказ" была еще кнопка "Заказать", при нажатии на которую товар добавлялся бы в корзину и можно было бы оформить заказ. Буду очень благодарна за помощь.
 

DMax

Новичок
Друзья, подскажите пожалуйста, как в некоторых шаблонах отключить всплывающее сообщение об Ошибке и сделать его обычным?
Просто никто не успевает прочитать, оно быстро прячется...
Установил снипет минимального заказа, и сообщение о нехватки минималки быстро прячется, как его можно сделать обычным сообщением, например вверху страницы?
Заранее спасибо!
 

Stork.71

Гуру
Местный
По идее должно быть не всплываемым. Это наверное тема ваша шалит, попробуйте с другой.
Или попробуйте конструкцию wc_add_notice( ) в сниппете заменить на echo
 

DMax

Новичок
По идее должно быть не всплываемым. Это наверное тема ваша шалит, попробуйте с другой.
Или попробуйте конструкцию wc_add_notice( ) в сниппете заменить на echo
Да, это все тема, поменять на другую не могу, попробовал ваш способ и сообщение не всплывает а показывается постоянно, даже если сума минимального заказа уже набрана, а хотелось бы чтобы это сообщение пропадало после набора минимальной сумы...
 

Stork.71

Гуру
Местный
рискну предположить, что Ваша тема переписывает функцию wc_add_notice
Надо ее найти и переписать еще как-то :)
 

DMax

Новичок
Ребят, вот код с данной темы о минимальной суме заказа
Все работает, НО, не совсем.
Например минималка 500, клиент набирает ровно 500 и все равно не сможет оформить заказ, но если наберет 501 - все работает, поправьте пожалуйста..
Не хочется потерять клиента который наберет ровно на 500 или по обратной связи взорвет мозг...

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 = 500;

        // сумма из корзины
        $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' );
        }
    }
}

И остается открытый вопрос по всплывающем сообщении, как его сделать не всплывающим?
 

Stork.71

Гуру
Местный
Круто)) я бы радостью но как?)
откуда же нам знать, что у Вас за тема и чего она там переписывает?
поставить 499 - нельзя?
Тогда будет писаться "минимальная сумма заказа - 499". Что за бредовые костыли?
попробуйте в условии
if ( $total <= $minimum_cart_total) поменять <= на <.
 
  • Like
Реакции: qwer

andrej

Форумчанин
Доброго времени!
Не могу найти, как на страницу товара добавить свой текст или код в нужном месте.

Код общий для всех товаров!

Подскажите пожалуйста!
Нужно ниже вкладок, выше "Похожих товаров", код для functions.php


Спасибо!
 
Последнее редактирование:

ge30

Новичок
Всем привет, помогите пожалуйста прописать условие при минимальном заказе. Минимальная сумма заказа не позволяет делать доставку почтой но если забрать из магазина то оформление возможно (условия должны позволять оформлять заказ). Использую плагин "shipping-local-pickup-plus" вот код на ограничение заказа:

Код:
// Minimum amount for purchase of goods
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 = 36;

        // сумма из корзины
        $total = WC()->cart->subtotal;
   
        // Сообщение об ошибке при меньшей сумме в корзине, чем лимит
        if( $total <= $minimum_cart_total  ) {
            // Display our error message
            $not_enough_summa = $minimum_cart_total - $total;
            wc_add_notice( sprintf( 'Please note that our minimum order for delivery is:  %s'
                .'<br>For delivery is not enough: %s',
                wc_price($minimum_cart_total),
                wc_price($not_enough_summa)
                ),
            'error' );


      }
   }
}


Заранее спасибо!
 

svil

Новичок
Как поменять цвет цены только распродажи onsale, чтобы зачеркнутая цена осталась своего неизменного цвета, а распродажная цена стала красной?
 

goshavis

Новичок
Что-то не поняла, что в этом коде нужно заменить на (?) url категории?

5. Исключить категорию из виджета woocommerce -категории

add_filter( 'woocommerce_product_categories_widget_args', 'woo_product_cat_widget_args' );

function woo_product_cat_widget_args( $cat_args ) {

$cat_args['exclude'] = array('16');

return $cat_args;
}

Здравствуйте, установлена последняя на текущий момент версия woocommerce и стандартная тема wootoque. Скрыл категорию, захожу в магазин в списке категорий ее нет, но... как только нажимаю на любую другую, она раскрывается и у меня появляется моя скрытая категория. Что то поменялось наверно в последних версиях?
 

Valeriy8

Новичок
Проверил на последних версиях WP + WooCommerce + Storefront 5й сниппет.
PHP:
add_filter( 'woocommerce_product_categories_widget_args', 'woo_product_cat_widget_args' );
function woo_product_cat_widget_args( $cat_args ) {
    $cat_args['exclude'] = array(12,13);
    return $cat_args;
}
В стандартном виджете вывода категорий все работает и нужные категории исключаются.

Но возникает вопрос. Если я хочу вывести два виджета в сайдбар, в одном показать категории без исключенных, а в другом только исключенные, как это сделать? Вышеприведенный код будет фильтровать все подряд.

Подскажите, пожалуйста. Спасибо!
 

Vad.im

Новичок
Вопрос по пункту 3, "Удаление товарной категории с главной страницы магазина"
Применил код:
add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

function custom_pre_get_posts_query( $q ) {
if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;

if ( ! is_admin() && is_shop() && ! is_user_logged_in() ) {
$q->set( 'tax_query', array(array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'opt' ), // Не показывать товары в этих категориях на странице магазина
'operator' => 'NOT IN'
)));

}
remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
}


Добавил свою категорию "ОПТ"
Все работает. Товары категории "ОПТ" не выводятся в общем каталоге на странице сайта.
НО, если воспользоваться поиском по сайту, то товар этой категории
больше не отображается в результатах поиска на сайте.
Как это можно поправить.
 
Последнее редактирование:
Сверху Снизу