针对已登录和未登录用户的AJAX请求

时间:2019-06-07 作者:I am the Most Stupid Person

据我所知wp_ajax_{action} 仅对登录用户激发挂钩。对于已注销的用户,wp_ajax_nopriv_{action}根据ajax请求触发操作。

那么,如何为已登录和未登录的用户编写?我必须写两个函数吗?

例如情况:有一个表格可以由登录用户和非登录用户填写。

2 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

您可以将函数添加到两个挂钩:

add_action(\'wp_ajax_ajaxTest\', \'ajaxTest\');
add_action(\'wp_ajax_nopriv_ajaxTest\', \'ajaxTest\');
但是,有一种更好的方法,使用REST API端点:

add_action( \'rest_api_init\', function () {
        register_rest_route( \'yourstuff/v1\', \'/test/\', array(
                \'methods\' => \'POST\',
                \'callback\' => \'yourstuff_test_endpoint\'
        ) );
} );

function yourstuff_test_endpoint( $request ) {
    $stuff = $request[\'stuff\'];
    return "Received ".esc_html( $stuff );
}
现在,如果我们刷新永久链接,我们将在example.com/wp-json/yourstuff/v1/test, 当我们向它发出POST请求时,我们会返回一个JSON字符串。E、 g。

jQuery.ajax( {
    url: \'/wp-json/yourstuff/v1/test\',
    method: \'POST\',
    data:{
        \'stuff\' : \'Hello World!\'
    }
} ).done( function ( response ) {
    console.log( response );
} );
使用该JavaScript,我希望在控制台中看到以下内容:

"Received Hello World!"
您可以将更多参数传递给register_rest_route 告诉它您的请求期望/需要/可选的参数,身份验证、验证、清理,它将为您解决所有问题。

使用wpadminajax,您必须自己完成所有的工作,并希望您构建正确,以及在所有可能的错误中编写程序。REST API为您做到了这一切

SO网友:Bhupen

不可以。您只需编写一个函数。例如

function ajaxTest(){
//your code
}
add_action(\'wp_ajax_ajaxTest\', \'ajaxTest\');
add_action(\'wp_ajax_nopriv_ajaxTest\', \'ajaxTest\');

相关推荐

使用admin-ajax.php时出现错误400错误请求

我有一个简单的ajax脚本,可以在WordPress中发送表单。获取ajax URL的PHP代码是:wp_localize_script( \'custom_child\', \'jAjax\', array(\'ajax_url\' =>admin_url(\'admin-ajax.php\'))); 此外,我还有in函数。php如下所示:function enviar_pedido_clientes() { // do something with the da