如何在WordPress后台发送AJAX请求

时间:2020-12-17 作者:user8463989

在前面wp_localize_script 当我查看源代码时,似乎可以看到nonce。

wp_localize_script(\'scripts\', \'myAjax\', array(
    \'root_url\' => get_site_url(),
    \'ajaxurl\'  => admin_url( \'admin-ajax.php\' ),
    \'nonce\'    => wp_create_nonce(\'wp_rest\')
));
例如,当我尝试在登录wordpress后端时获取用户列表时,会出现401未经授权的错误。当我查看源时,我的nonce不在那里,只在前端。

$.ajax({
        url: \'https://example.com/wp-json/wp/v2/users/\',
        method: \'GET\',
        beforeSend: (xhr) => {
        xhr.setRequestHeader(\'X-WP-Nonce\', myAjax.nonce);
        },
    })
    .done(function (data) {
        console.log(data);
    })
    .fail(function (jqXHR, textStatus, errorThrown) {
        console.log(textStatus + \': \' + errorThrown);
        console.warn(jqXHR.responseText);
    })

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

当您将脚本排队或本地化时,您是专门为前端或管理员执行的。如果要在这两种情况下排队或本地化脚本,则必须针对这两种情况专门进行。

这用于为前端排队/本地化

add_action( \'wp_enqueue_scripts\', \'your_function_front\' );
your_function_front() {
     wp_localize_script(\'scripts\', \'myAjax\', array(
         \'root_url\' => get_site_url(),
         \'ajaxurl\'  => admin_url( \'admin-ajax.php\' ),
         \'nonce\'    => wp_create_nonce(\'wp_rest\')
     ));
}
但对于后端,您还必须添加:

add_action( \'admin_enqueue_scripts\', \'your_function_admin\' );
your_function_admin() {
     wp_localize_script(\'scripts\', \'myAjax\', array(
         \'root_url\' => get_site_url(),
         \'ajaxurl\'  => admin_url( \'admin-ajax.php\' ),
         \'nonce\'    => wp_create_nonce(\'wp_rest\')
     ));
}
因此,如果它在前端工作,那么您可能已经正确地完成了第一个,现在您只需要在后端完成它。只需记住将函数命名为在插件/主题中有意义的名称即可。