Php Wordpress如何在插件函数中使用添加动作

Php Wordpress如何在插件函数中使用添加动作,php,wordpress,woocommerce,hook-woocommerce,Php,Wordpress,Woocommerce,Hook Woocommerce,我需要在AJAX响应函数中执行/调用woocommerce\u cart\u calculate\u 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_

我需要在AJAX响应函数中执行/调用
woocommerce\u cart\u calculate\u 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    
}   
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_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;
}
我知道这是完全错误的,但想用wordpress的方式来做吗?比如在
my\u函数
之外编写
woocommerce\u cart\u计算费用
,并在需要时调用它


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

不,您应该这样做。
您将动作挂钩添加到
woocommerce\u cart\u calculate\u 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 );
    }
}

不,你应该这样做。
您将动作挂钩添加到
woocommerce\u cart\u calculate\u 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 );
    }
}

我可以通过使用会话来解决这个问题。我所做的是,如果我的
特定条件
为真,则在会话中添加一个键值,然后在
woocommerce\u cart\u计算费用
中检查会话是否有折扣,然后将折扣添加到购物车中

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    
}   
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_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;
}
添加折扣
功能中,我们检查会话并向购物车添加折扣

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    
}   
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_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;
}

希望这对某人有所帮助。

我可以通过使用会话解决这个问题。我所做的是,如果我的
特定条件
为真,则在会话中添加一个键值,然后在
woocommerce\u cart\u计算费用
中检查会话是否有折扣,然后将折扣添加到购物车中

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    
}   
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_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;
}
添加折扣
功能中,我们检查会话并向购物车添加折扣

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    
}   
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_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;
}

希望这对其他人有所帮助。

谢谢你的帮助,还有什么可以调用
添加折扣($cart)
我的函数()
你能描述一下你想要实现什么吗?
我的函数
是一个在wordpress中为AJAX调用运行的函数,根据我的逻辑,我需要在
my\u功能中添加折扣。这是我的要求。我明白了,你能编辑你的原始帖子并添加你正在使用的ajax代码吗。。。不是全部,只是添加操作和函数名或其他使其简短但仍然有意义的内容。感谢您的更新,但它对我不起作用。谢谢您的更新,并且是否可以从
我的函数()调用
添加折扣($cart)
你能描述一下你想要实现什么吗?
my_函数
是一个在wordpress中为AJAX调用运行的函数,根据我的逻辑,我需要在
my_函数
中添加折扣。这是我的要求。我明白了,你能编辑你的原始帖子并添加你正在使用的ajax代码吗。。。不是全部,只是添加操作和函数名或其他使其简短但仍然有意义的内容。感谢您的更新,但它不适用于我。