【问题标题】:WordPress: do_action won't work in ajax callback functionWordPress:do_action 在 ajax 回调函数中不起作用
【发布时间】:2021-02-01 23:49:30
【问题描述】:

我想在 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');
    }
    ...

}

【问题讨论】:

  • 可能只是执行顺序的问题。当 WP 执行 AJAX 调用时,它会通过 admin-ajax.php。您应该 100% 确保您的“add_action”实际上在 AJAX 处理程序之前被调用

标签: ajax wordpress wordpress-action


【解决方案1】:

您只需要调用该函数。无论您从何处获取 $args,只需将其作为函数的参数传递即可。

// 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
        send_email_to_user($args);
    }
    ...
    exit(); /// if it's ajax function, don't forget to exit or die.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 2023-03-27
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    相关资源
    最近更新 更多