【问题标题】:Wordpress how to use add_action inside plugin functionWordpress 如何在插件函数中使用 add_action
【发布时间】:2018-11-04 13:02:07
【问题描述】:

我需要在 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    
}   

我知道这是完全错误的,但正在寻找一种以 w​​ordpress 方式执行此操作的方法?比如在my_function 之外写woocommerce_cart_calculate_fees 并在需要时调用它。

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

【问题讨论】:

    标签: php wordpress woocommerce hook-woocommerce


    【解决方案1】:

    不,你应该这样做。
    您可以像这样将动作挂钩添加到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 );
        }
    }
    

    【讨论】:

    • 谢谢你,无论如何可以从my_function()打电话给add_discount( $cart )
    • 你能具体描述一下你想要达到的目标吗?
    • my_function 是一个在 wordpress 中为 AJAX 调用运行的函数,根据我的逻辑,我需要在 my_function 中添加折扣。这是我的要求。
    • 我明白了,您能否编辑您的原始帖子并添加您正在使用的 ajax 代码...不是全部,只是 add_action 和函数名称或使其简短但仍然有意义的东西.
    • 感谢您的更新,但对我不起作用。
    【解决方案2】:

    我可以使用会话来解决这个问题。我所做的是,如果我的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;
    }
    

    希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-11-12
      • 2012-10-31
      • 2011-04-05
      • 2014-02-03
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      相关资源
      最近更新 更多