WordPress无法从Ajax请求中获取get_current_user_id()

时间:2019-05-22 18:53:44

标签: javascript php jquery wordpress

我尝试用wordpress提出ajax请求。所以我创建了一个简单的js请求:

$.ajax({
    url: '?',
    type: 'POST',
    data: {
        'pr_post': post,
        'pr_rating': rating
    },
    success: function (response) {
        console.log(response);
     }
});

这是我处理请求的功能。

function pr_request()
{
    if (isset($_REQUEST['pr_post']) && isset($_REQUEST['pr_rating']) && isset($_REQUEST['pr_user'])) {

         $post = $_REQUEST['pr_post'];
         $rating = ($_REQUEST['pr_rating'] > 5 ? 5 : $_REQUEST['pr_rating']);
         $user = get_current_user_id();

         if (!pr_has_user_already_voted($user, $post)) {

             global $wpdb;
             $table = $wpdb->prefix . 'mitmach_ratings';

             $wpdb->query($wpdb->prepare("insert into $table values (null, $post, $rating, '$user');"));
             wp_send_json(['message' => 'success']);

         } else {
             wp_send_json(['message' => 'duplicate'], 403);
         }
    }
 }

如您所见,我调用了get_current_user_id()函数。即使用户登录,此函数也始终返回true。如何在不通过ajax发送的情况下在处理程序中获取用户ID?

1 个答案:

答案 0 :(得分:1)

对于开始检查文档-WP Ajax

您需要发送<cstring>密钥

  

请注意,上面我们的JavaScript中定义的“操作”键值“ my_action”如何与下面的AJAX处理程序中的操作“ wp_ajax_my_action”的后半部分匹配。这是因为它用于通过admin-ajax.php调用服务器端PHP函数。如果未指定操作,则admin-ajax.php将退出,并在此过程中返回0。

action

并像这样呼叫:

$.ajax({
    url: '?',
    type: 'POST',
    data: {
        action    : 'pr_post',
        pr_rating : rating
    },
    success: function (response) {
        console.log(response);
     }
});