Do_action在AJAX回调中不起作用

时间:2020-10-19 作者:pixelngrain

我想在ajax任务成功完成后执行一些操作。例如,如果项目添加到购物车,我想发送电子邮件。还可能执行一些其他操作。

设置do_action(\'prefix_item_added_to_cart\', $args); 无法识别,因此add_action 不执行任务,在我的情况下是发送电子邮件。

如果我编写代码和过程代码来发送电子邮件,效果很好,但使用do_action.

不起作用

// ajax callback function
function my_ajax_callback() {

    ...
    // add item to cart
    $cart =. new Cart();
    $cart_id = $cart->add_item($params);

    // if item added successfully
    if($cart_id){
        // perform action
        do_action(\'prefix_item_added_to_cart\', $args);
    }
    ...

}

// action callback
function send_email_to_user($args) {

    // send email notification
    wp_mail(\'set params for email\');

}

// action
add_action(\'prefix_item_added_to_cart\', \'send_email_to_user\', $args);

工作

function my_ajax_callback() {

    ...
    // add item to cart
    $cart =. new Cart();
    $cart_id = $cart->add_item($params);

    // if item added successfully
    if($cart_id){
        // send email notification
        wp_mail(\'set params for email\');
    }
    ...

}

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

Note: OP and me resolved the question/issue via chat — 尽管实际的问题来源还不确定,但在OP使用的实际AJAX回调中,实际上没有(或者可能OP忘记了做)do_action() 电话:)

原始修订答案(供参考):

如果您的实际代码中有类似的内容,即操作已正确注册:

add_action( \'wp_ajax_<your action>\', \'my_ajax_callback\' );        // for logged-in users
add_action( \'wp_ajax_nopriv_<your action>\', \'my_ajax_callback\' ); // for all other users

add_action( \'prefix_item_added_to_cart\', \'send_email_to_user\' );
那么我不明白为什么回调函数没有被调用——当然,除非(if ( $cart_id )) 退货false.

但那是什么$args 在您的add_action() 呼叫该参数应为整数,即回调优先级。

相关推荐

如何防止AJAX请求中的操作,当在管理员端?

我有一个插件,可以在前端隐藏某些帖子。为了保持一致,我需要将帖子也隐藏在搜索和AJAX搜索中(需要使用任何主题和搜索)。为了使用AJAX搜索实现这一点,我使用了:if ( wp_doing_ajax() ){ add_action( \'pre_get_posts\', array($this, \'plugin_function_set_visibility\') ); } 我唯一的问题是,这还隐藏了管理仪表板中的帖子,帖子无法再编辑。is_admin() 在这种情况下