Wordpress wp_ajax公共网址?

时间:2013-05-01 21:10:19

标签: ajax wordpress

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

3 个答案:

答案 0 :(得分:7)

Codexwp_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;
}