提问者:小点点

根据折扣添加到购物车按钮文本更改


这会将文本更改为“再次添加?”当客户单击“添加到购物车”时,我想知道如何在每次单击按钮时将此更改为应用折扣。

代码:

add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_add_to_cart_again' );
function woo_add_to_cart_again() {

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

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

当第一次点击时,按常规添加到购物车,但将按钮文本更改为“再次购买”

在创建新产品时,我希望这是WooCommerce管理员中“可下载”旁边的复选框选项。任何帮助都非常感谢。


共1个答案

匿名用户

首先根据数量更改文本我刚刚添加了一个if条件到您的函数中,以检查购物车中特定产品的数量,并相应地更改文本如下:

add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_add_to_cart_again' );
function woo_add_to_cart_again() {

    global $woocommerce;
    foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
        if ( $values['quantity'] == 1 && get_the_ID() == $_product->id ) {
            return __( 'Buy again & Get 5% OFF', 'woocommerce' );
        }

        if ( $values['quantity'] == 2 && get_the_ID() == $_product->id ) {
            return __( 'Buy 3 and get 10% OFF', 'woocommerce' );
        }
        if ( $values['quantity'] > 2 && get_the_ID() == $_product->id ) {
            return __( 'Add Again', 'woocommerce' );
        }
    }
    return __( 'Add to cart', 'woocommerce' );
}

注意:如果您也想更改归档页面中的文本,可以使用woocommerce\u product\u add\u to\u cart\u texthook将其添加到上述代码中,如下所示:

add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_add_to_cart_again' );
add_filter( 'woocommerce_product_add_to_cart_text', 'woo_add_to_cart_again' );

然后,我们需要计算符合折扣条件的产品的价格,并根据产品价格添加折扣。

我们将使用woocommerce_cart_calculate_fees将此折扣插入我们的购物车,如下所示:

add_action( 'woocommerce_cart_calculate_fees', 'add_discount' );


function add_discount( WC_Cart $cart ) {

    $discounts = []; //Store the disocunts in array 
    foreach ( $cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
        if ( $values['quantity'] == 2 ) {
            // Calculate the discount amount  
            $product_price = ( $_product->get_sale_price() ) ? $_product->get_sale_price() : $_product->get_regular_price();
            $price         = $product_price * 2;
            array_push( $discounts, $price * 0.05 ); //Push the discount 

        }

        if ( $values['quantity'] > 2 ) {
            // Calculate the discount amount  
            $product_price = ( $_product->get_sale_price() ) ? $_product->get_sale_price() : $_product->get_regular_price();
            $price         = $product_price * $values['quantity'];
            $discount      = $price * 0.1;
            array_push( $discounts, $price * 0.1 );//Push the discount 
        }
    }

    $cart->add_fee( 'Your Disocunt', -array_sum( $discounts ) );

}

更新:

要在使用Ajax时更改add_to_cart文本,实际上它已经在这里通过@LoicTheAztec在这个链接中得到了回答,只需稍加修改,您就可以实现以下目标:

add_action( 'wp_footer', 'change_add_to_cart_jquery' );
function change_add_to_cart_jquery() {
    if ( is_shop() || is_product_category() || is_product_tag() ) : ?>
            <script type="text/javascript">
            (function ($) {
                $('a.add_to_cart_button').click(function () {
                    $this = $(this);
                    if (typeof $($this).attr('data-qty') == 'undefined') {
                        $($this).text('Buy again & Get 5% OFF');
                        $($this).attr('data-qty', 1);
                        return;
                    }
                    if ($($this).attr('data-qty') == 1) {
                        $($this).text('Buy 3 and get 10% OFF');
                        $($this).attr('data-qty', 2);
                        return
                    }
                    $($this).text('Add Again');
                });

            })(jQuery);
            </script>
        <?php
        endif;
}

当然,上面的代码已经过测试。