添加到购物车按钮基于折扣的文本更改

时间:2018-10-01 15:34:19

标签: woocommerce

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

代码:

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');
}

第一次单击时,照常添加到购物车,但将按钮文本更改为“再次购买并获得5%折扣”,第二次按下后,文本更改为“购买3并获得10%折扣”,折扣应适用于产品,而不是购物车。

在创建新产品时,我希望这是WooCommerce Admin中“可下载”旁边的复选框选项。我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

首先要根据数量更改文本,我刚刚在您的函数中添加了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_product_add_to_cart_text钩子将其添加到上述代码中,如下所示:

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文本,实际上已经在此处答复{@ 3}的@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;
}

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