Wordpress如何在插件函数

时间:2018-05-25 07:41:00

标签: php wordpress woocommerce hook-woocommerce

我需要在AJAX响应函数中执行/调用woocommerce_cart_calculate_fees动作,如下所示,

要求是在购物车中添加特定条件的折扣。

add_action( 'wp_ajax_tcf_et_add_estimate_to_cart', 'my_function' );
my_function()
{

    // ADD SOME PRODUCTS TO THE CART
    if( certain condition  )
    {
        add_action( 'woocommerce_cart_calculate_fees', 'add_discount', 1, 1 );
        function add_discount( $cart )
        {
             global $woocommerce;
             $cart->add_fee( 'Discount' , -100 );
             return $cart;
         }
    }
    // some code    
}   

我知道这是完全错误的但是想用wordpress方式做到这一点吗?比如在woocommerce_cart_calculate_fees之外写my_function并在需要时调用它。

是否有任何技巧或技巧可以执行此操作,否则无法在Wordpress中执行此操作?

2 个答案:

答案 0 :(得分:2)

不,这就是你应该怎么做的 您可以将动作挂钩添加到woocommerce_cart_calculate_fees,如下所示:

add_action( 'woocommerce_cart_calculate_fees', 'add_discount', 1, 1 );
function add_discount( $cart )
{
    if ( certain condition  )
    {
        $cart->add_fee( 'Discount' , -100 );
    }
}

然后if语句在里面。

至于ajax请求它会是相同的,但这次你没有$cart变量,而是使用WC()->cart

add_action( 'wp_ajax_tcf_et_add_estimate_to_cart', 'my_function' );
function my_function()
{
    if ( certain condition  )
    {
        WC()->cart->add_fee( 'Discount' , -100 );
    }
}

答案 1 :(得分:0)

我可以使用会话来解决这个问题。我做的是,如果我的certain condition为真,则在会话中添加一个键值,然后在woocommerce_cart_calculate_fees内检查会话是否有,然后将折扣添加到购物车。

add_action( 'wp_ajax_tcf_et_add_estimate_to_cart', 'my_function' );
function my_function()
{
    if ( certain condition  )
    {
        session_start();
        $_SESSION['_my_key_value'] = 'certain condition is true';
    }
}

add_discount函数的旁边,我们检查会话并为购物车添加折扣。

add_action( 'woocommerce_cart_calculate_fees', 'add_discount', 1, 1 );
function add_discount( $cart )
{
    if ( isset( $_SESSION['_my_key_value'] )  )
    {
        $cart->add_fee( 'Discount' , -100 );

        // it is important to remove data from session once it is used
        unset( $_SESSION['_my_key_value'] ); 
    }
    return $cart;
}

希望对某人有所帮助。