Задать вопрос
  • Как вывести вместо бейджа "скидка",скидку в процентах в woocommerce?

    Ну в общем то ничего сложного.
    Немножечко кодика

    add_action( 'woocommerce_sale_flash', 'pancode_echo_sale_percent' );
    
    /**
     * Echo discount percent badge html.
     *
     * @param string $html Default sale html.
     *
     * @return string
     */
    function pancode_echo_sale_percent( $html ) {
    	global $product;
    
    	/**
    	 * @var WC_Product $product
    	 */
    
    	$regular_max = 0;
    	$sale_min    = 0;
    	$discount    = 0;
    
    	if ( 'variable' === $product->get_type() ) {
    		$prices      = $product->get_variation_prices();
    		$regular_max = max( $prices['regular_price'] );
    		$sale_min    = min( $prices['sale_price'] );
    	} else {
    		$regular_max = $product->get_regular_price();
    		$sale_min    = $product->get_sale_price();
    	}
    
    	if ( ! $regular_max && $product instanceof WC_Product_Bundle ) {
    		$bndl_price_data = $product->get_bundle_price_data();
    		$regular_max     = max( $bndl_price_data['regular_prices'] );
    		$sale_min        = max( $bndl_price_data['prices'] );
    	}
    
    	if ( floatval( $regular_max ) ) {
    		$discount = round( 100 * ( $regular_max - $sale_min ) / $regular_max );
    	}
    
    	return '<span class="onsale">-&nbsp;' . esc_html( $discount ) . '%</span>';
    }

    и результат

    5e75dab8106bc279378429.png


    Но если Вы захотите добавить разные ярлычки, например для товаров которые не имеют скидки, то тут без переноса шаблона не обойтись. К сожалению разработчики woocommerce жестко закодировали в шаблоне условие проверки товара на наличие скидки.
    Ответ написан
    4 комментария
  • Как удалить товар из корзины woocommerce автоматически?

    NikMaster777
    @NikMaster777 Автор вопроса
    1) Пустая корзина перед добавлением в корзину (если корзина не пуста) сбросит всю корзину:

    add_filter( 'woocommerce_add_to_cart_validation', 'one_cart_item_at_the_time', 10, 3 );
    function one_cart_item_at_the_time( $passed, $product_id, $quantity ) {
        if( ! WC()->cart->is_empty())
            WC()->cart->empty_cart();
        return $passed;
    }


    2) Этот код проверит только добавляемый товар, остальные товары если есть в корзине удалены не будут:

    add_filter('woocommerce_add_to_cart_validation', 'one_cart_item_at_the_time', 10, 3);
    
    function one_cart_item_at_the_time( $passed, $product_id, $quantity ) {
        if(! WC()->cart->is_empty()) {
            $cartId = WC()->cart->generate_cart_id($product_id);
            $cartItemKey = WC()->cart->find_product_in_cart($cartId);
            if ($cartItemKey) {
              return $passed;
            } else {
              $woocommerce->cart->add_to_cart( $product_id );
              return $passed;
            }
        }
    }
    Ответ написан
    Комментировать