• Как вывести общую сумму скидок в Woocommerce?

    @Mircek Автор вопроса
    UPD: проблему решила сама. Оставляю решение — вдруг у кого-то будет та же задача. В коде заменила

    . wc_price( $discount_total + $woocommerce->cart->discount_cart ) .

    на
    . wc_price( $woocommerce->cart->subtotal - $woocommerce->cart->total + $woocommerce->cart->shipping_total + $discount_total ) .
    .

    Что делает новая строка:
    $woocommerce->cart->subtotal - $woocommerce->cart->total — вычитаем из суммы всех товаров итоговую сумму заказа после применения всех скидок
    + $woocommerce->cart->shipping_total — добавляем стоимость доставки (если этого не сделать, то стоимость доставки вычтется из суммы сэкономленных денег)
    + $discount_total — добавляем сумму индивидуальных скидок на товары (если какой-то товар обычно стоит 1000 руб., но сейчас он на распродаже и стоит 800 руб., то эти 200 рублей тоже нужно учесть как сэкономленные).

    И добавляем условие выводить строку «Вы сэкономили: N руб.» только в том случае, если «сумма товаров + доставка» больше, чем «сумма заказа с учётом всех скидок + доставка» или если в заказе есть товар(ы) с индивидуальной скидкой.

    if ( $woocommerce->cart->subtotal + $woocommerce->cart->shipping_total > $woocommerce->cart->total + $woocommerce->cart->shipping_total || $discount_total > 0 )


    Весь готовый код выглядит так (вставлять в functions.php дочерней темы):

    function wc_discount_total_30() {
     
        global $woocommerce;
          
        $discount_total = 0;
          
        foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values) {
              
       $_product = $values['data'];
      
            if ( $_product->is_on_sale() ) {
            $regular_price = $_product->get_regular_price();
            $sale_price = $_product->get_sale_price();
            $discount = ($regular_price - $sale_price) * $values['quantity'];
            $discount_total += $discount;
            }
      
        }    
                
    if ( $woocommerce->cart->subtotal + $woocommerce->cart->shipping_total > $woocommerce->cart->total + $woocommerce->cart->shipping_total || $discount_total > 0 ) {
    	    
        echo '<tr class="cart-discount">
        <th>'. __( 'Вы сэкономили:', 'woocommerce' ) .'</th>
        <td data-title=" '. __( 'Saved', 'woocommerce' ) .' ">' 
        . wc_price( $woocommerce->cart->subtotal - $woocommerce->cart->total + $woocommerce->cart->shipping_total + $discount_total ) .'</td>
        </tr>';
    }    
     
    }
     
    // Hook our values to the Basket and Checkout pages
     
    add_action( 'woocommerce_cart_totals_after_order_total', 'wc_discount_total_30', 99);
    add_action( 'woocommerce_review_order_after_order_total', 'wc_discount_total_30', 99);


    Решение может быть не самое изысканное, но рабочее (проверено).
    Ответ написан
  • Вывод краткого описания товара в табы?

    OtshelnikFm
    @OtshelnikFm Куратор тега WordPress
    Мои работы: otshelnik-fm.ru
    Это обычная вёрстка карточки товара.
    Начните с малого - выведите пустые табы в карточке товара.
    Потом туда описание, в другую отзывы, метаполя в третью и т.д. всё по отдельности гуглится
    Ответ написан
  • Как можно оптимизировать и сократить данный код?

    KickeRocK
    @KickeRocK
    FrontFinish
    Для вашего примера, но я бы поменял разметку
    $('.menu-source li a').click((e)=>{
    e.preventDefault();
    let listId = $(this).closest('li').attr('id');
    $('.menu-source li').removeClass('active');
    $(this).closest('li').addClass('active');
    $(`[id^="text-source"]`).removeClass('shown');
    $(`[id="text-${listId}"]`).addClass('shown');
    });
    Ответ написан
  • Как можно оптимизировать и сократить данный код?

    OTCloud
    @OTCloud
    - И как назовемся? Пожиратели пожирателей смерти?
    Не могу сказать что этот пример хорошо реализован, однако вам стоит смотреть в сторону табов. Код с добавлением класса active можно исключить прописав в css стили примерно так:
    .my-container-class[data-toggle="true"] { background: red }
    .my-container-class[data-toggle="false"] { background: none }


    Ответ написан