我想在我的主题中做一个ajax请求。
如果我登录后台,请求会这样做,但如果我没有登录,则返回为空...请问有什么解决方案?
在我看来:
$.ajax({
type: "POST",
url: 'http://www.mysite.com/wp-admin/admin-ajax.php',
data: $('#EventForm').serialize()+'&action=event_form',
success: function(response){
if(response == 1){
alert('ok');
} else {
alert('no ok');
}
});
在functions.php中(仅当我登录后台时才有效)
add_action('wp_ajax_event_form', 'ajax_event_form');
function ajax_event_form(){
global $wpdb;
...
echo true;
die;
}
答案 0 :(得分:7)
从Codex:wp_ajax_nopriv_(action)
为未登录的用户执行。因此,如果您希望在访问者和登录用户的前端触发它,您可以执行此操作这样:
add_action('wp_ajax_my_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
答案 1 :(得分:1)
创建一个插件并添加:
<?php
/*
* Plugin Name:ajax
*/
function my_ajax_callback_function() {
echo "hiii";
print_r($_POST);
exit();
}
add_action( 'wp_ajax_my_action_name', 'my_ajax_callback_function' );
// If called from admin panel
add_action( 'wp_ajax_nopriv_my_action_name', 'my_ajax_callback_function' );
创建一个js并添加:
(function($) {
$(document).ready(function(e) {
$.ajax({
url: "<?php echo admin_url('admin-ajax.php'); ?>",
type: 'POST',
data: {
action: "my_action_name","name":"hithin","age":"27"
}),
success: function (data, textStatus, jqXHR) {
console.log(data);
}
});
}
})(jQuery);
答案 2 :(得分:1)
WordPress中的ajax请求的工作原理是将用户分为两类
1)具有登录权限的用户。 2)没有登录权限的用户。
因此,如果您已登录(即使是订阅者),您的ajax功能也会被触发,即
add_action('wp_ajax_event_form', 'ajax_event_form');
这将调用'ajax_event_form'函数。
要使这项功能适用于未登录的用户,您必须在ajax操作
下面写下此内容add_action('wp_ajax_nopriv_event_form', 'ajax_event_form');
所以你的代码就像:
add_action('wp_ajax_event_form', 'ajax_event_form');
add_action('wp_ajax_nopriv_event_form', 'ajax_event_form');
function ajax_event_form(){
global $wpdb;
...
echo true;
die;
}