Wordpress как использовать add_action внутри функции плагина - PullRequest
0 голосов
/ 25 мая 2018

Мне нужно выполнить / вызвать woocommerce_cart_calculate_fees действие внутри функции ответа AJAX, как показано ниже,

Требуется добавить скидку в определенном состоянии в корзину.

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    
}   

Iзнаете, это совершенно неправильно, но вы ищете способ сделать это в WordPress?например, напишите woocommerce_cart_calculate_fees за пределами my_function и при необходимости вызовите его.

Есть ли какой-нибудь прием или методика, позволяющая это сделать, или же это невозможно сделать в Wordpress?

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Я мог бы решить это с использованием сеанса.Я добавил следующее: добавьте значение ключа в сеанс, если мой certain condition равен true, а затем в рамках проверки 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;
}

Надеемся, что это кому-нибудь поможет.

0 голосов
/ 25 мая 2018

Нет, это то, как вы должны это сделать.
Вы добавляете свой хук действия к 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 );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...