簡體   English   中英

WordPress如何在插件函數中使用add_action

[英]Wordpress how to use add_action inside plugin function

我需要在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方式實現此目標的方法嗎? 例如在my_function之外編寫woocommerce_cart_calculate_fees並在需要時調用它。

是否有任何技巧或技術可以執行此操作,否則在Wordpress中無法做到?

不,這是您應該怎么做。
您可以將操作鈎子添加到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 );
    }
}

我可以通過使用會話來解決此問題。 我所做的是,如果我的certain condition為true,則向會話添加一個鍵值,然后在woocommerce_cart_calculate_fees檢查會話是否具有,然后將Discount添加到購物車。

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

希望對別人有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM