如何为未登录的用户加载 wp ajax?



我知道我应该按照文档说使用wp_ajax_nopriv但我不确定如何。

在前端,我做:

var ajaxscript = { ajax_url : '<?php echo admin_url("admin-ajax.php"); ?>' };   
$.ajax({
url: ajaxscript,
type: 'post',
dataType: 'json',
data: { action: 'data_fetch', dates: datesSearch },
success: function(data) {
...
}
});

我知道我可以定义urlfunction如下:

function myAjaxUrl() {
echo '<script type="text/javascript">
var ajaxurl = "' . admin_url('admin-ajax.php') . '";
</script>';
}
add_action('wp_head', 'myAjaxUrl');

这将使前端的 ajax 调用如下所示:

$.ajax({
url: ajaxurl...

但是,我将如何使用wp_ajax_nopriv才能为未登录的用户访问wp-ajax

您需要做的就是将函数注册到名为wp_ajax_nopriv_{your_function_name}的钩子上

因此,对于您的情况,add_action( 'wp_ajax_nopriv_data_fetch', 'data_fetch' );应该可以解决问题。


在WordPress中注册ajax函数:

1. 在WordPress中注册ajax函数:您可以在主题functions.php文件中添加它。

// Simple Ajax function
add_action( 'wp_ajax_nopriv_simple_ajax_func', 'simple_ajax_func' );
add_action( 'wp_ajax_simple_ajax_func', 'simple_ajax_func' );
function simple_ajax_func() {
echo json_encode(array('success' => true));
wp_die();
}

2. 从 JavaScript 调用该 ajax 函数:

var ajax_url = '<?php echo admin_url( 'admin-ajax.php' ); ?>';
jQuery.ajax({
url : ajax_url,
type : 'post',
data : {
action : "simple_ajax_func",
},
success : function( response ) {
console.log('Success');
}
});

你误解了wp_ajax动作。

您必须使用 wp_ajax 过滤器在主题中创建 PHP 函数。

add_action( 'wp_ajax_foobar', 'my_ajax_foobar_handler' );
add_action( 'wp_ajax_nopriv_foobar', 'my_ajax_foobar_handler' );
// This is the function that you will fire when your ajax code hits the admin_url('admin-ajax.php')
function my_ajax_foobar_handler() {
// Make your response and echo it.
// Don't forget to stop execution afterward.
wp_die();
}

因此,对于WP管理员ajax了解需要触发此函数,您必须将其传递到ajax请求中。

//Note that the action here is what cames after the wp_ajax PHP function
var my_php_ajax_action_name = 'foobar'
$.ajax({
url: ajaxurl,
type: 'post',
dataType: 'json',
data: { action: my_php_ajax_action_name, dates: datesSearch },
success: function(data) {
// ...
}
});

最新更新