WordPress Ajax Call -- WordPress User ID


WordPress Ajax Call -- WordPress User ID

我正在开发一个基于Wordpress的网站,我是新手。基本上,我们使用插件来跟踪网站上的"点",我正在使用调用来获取用户的 wordpress ID 游戏。但是,问题是当我进行 ajax 调用时,它会返回 0(即未登录)作为用户 ID,但是当我直接访问 PHP 页面时,它会给我实际的用户 ID(例如:9)。 这是我在 PHP 文件中调用的插件函数:

function cp_currentUser() {
require_once(ABSPATH . WPINC . '/pluggable.php');
global $current_user;
get_currentuserinfo();
return $current_user->ID;
}

然后这是我的PHP文件

<?php
header("Access-Control-Allow-Origin: *");
require_once("wp-load.php");
echo cp_currentUser();
?>

这是我的跨域 AJAX 调用

$.post('http://my.domain.xz/cp_getbalance.php', {}, function(result){
console.log(result);
});

如果您在登录时直接在浏览器中转到上述 URL,它将为您提供用户 ID,但是如果我从 AJAX 调用尝试它,无论我以谁身份登录,我都会得到 0。

在我看来,你的方法是错误的。

您无法从 Cookie(客户端)获取有关它在服务器(服务器端)上处理的数据的信息。

您需要做的是:

  • 在 AJAX 中恢复开机自检呼叫之前的 current_user-> ID

  • 在开机自检中发送检索到的 ID

  • 通过通过 $ _POST 变量检索的服务器处理数据。

举个例子。

您的 PHP 文件:

header("Access-Control-Allow-Origin: *");
require_once("wp-load.php");
echo $_POST['user_id'];

您的跨域 AJAX 调用:

<?php
require "wp-load.php";
global $current_user:
$user_id = $current_user->ID;
?>
var formData = {
    'user_id': '<?php echo $user_id; ?>'
};
//console.log(formData);
$.ajax({
    url: "http://my.domain.xz/cp_getbalance.php",
    type: "post",
    data: formData,
    success: function(result) {
        console.log(result);
    }
});

话虽如此,在Wordpress中,AJAX调用以完全不同的方式完成,我建议您阅读本指南以更好地理解: https://codex.wordpress.org/AJAX_in_Plugins

我希望被证明是有帮助的

试试这个: wp_get_current_user()

require_once("wp-load.php");  //Please confirm your wp-load path
$current_user = wp_get_current_user();
echo $current_user->ID;
exit;

无论是否在 Ajax 回调中,您都应该始终使用 wp_die()。更好的是,使用wp_send_json()选项发送信息。

require_once("wp-load.php");  //Please confirm your wp-load path
$current_user = wp_get_current_user();
echo $current_user->ID;
 wp_die(); // this is required to terminate immediately and return a proper response

你在WordPress中使用AJAX的方式有点错误。

首先,您应该添加扩展函数:

add_action( 'wp_ajax_nopriv_cp_currentUser', 'cp_currentUser' );
function cp_currentUser() {
  $current_user = wp_get_current_user();
  header("Access-Control-Allow-Origin: *");
  header("Access-Control-Allow-Methods: POST");
  echo $current_user->ID;
  wp_die();
}

函数get_currentuserinfo()弃用(法典)。

第二个你的 Ajax 函数:

$.ajax({
   url: 'https://my.domain.xz/wp-admin/admin-ajax.php',
   method: 'POST',
   data: { action: 'cp_currentUser' }
}).done( function( response ) {
   console.log( response );
});