我需要在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中执行此操作?
答案 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;
}
希望对某人有所帮助。