4

我想在我的主题中做一个 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;
}
4

3 回答 3

11

Codexwp_ajax_nopriv_(action)为未登录的用户执行。因此,如果您希望它在前端为访问者和登录用户触发,您可以这样做:

add_action('wp_ajax_my_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
于 2013-05-01T21:17:09.013 回答
3

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;
}
于 2018-05-07T21:41:10.720 回答
3

创建一个插件并添加:

<?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);
于 2016-12-08T15:00:02.037 回答