You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress下用JavaScript添加用户元数据时$current_user为空求助

根因分析

你直接调用独立的自定义PHP文件,没有加载WordPress核心,所以所有WordPress原生函数都无法识别,用户全局变量也没有经过初始化,才会出现函数未定义、$current_user返回null的问题。另外你用的get_currentuserinfo()函数已经在WordPress 4.5版本正式废弃,就算加载了核心也会抛出弃用警告,应该用wp_get_current_user()替代。

WordPress官方有标准的AJAX处理规范,不推荐直接调用自定义PHP文件处理请求,优先用官方接口实现。

推荐实现方案(符合WordPress开发规范)

1. 后端注册AJAX处理逻辑

把以下代码添加到主题的functions.php文件,或者自定义插件的主文件内:

// 仅登录用户可访问的AJAX接口,不需要未登录用户访问可以删掉下面的nopriv钩子
add_action('wp_ajax_get_user_meta_info', 'ajax_get_user_meta_info');
add_action('wp_ajax_nopriv_get_user_meta_info', 'ajax_get_user_meta_info');

function ajax_get_user_meta_info() {
    $current_user = wp_get_current_user();
    // 校验用户登录状态
    if ($current_user->ID === 0) {
        echo json_encode([
            'code' => 401,
            'msg' => '用户未登录'
        ]);
        wp_die();
    }
    // 这里编写你操作用户元数据的逻辑
    // 示例返回用户数据,可按需调整返回字段
    echo json_encode([
        'code' => 200,
        'data' => $current_user
    ]);
    wp_die();
}

2. 调整前端AJAX请求

WordPress统一的AJAX处理入口是/wp-admin/admin-ajax.php,修改你的JS代码如下:

jQuery.ajax({
    type: "POST",
    url: 'https://mywebsite.com/wp-admin/admin-ajax.php',
    dataType: 'json',
    data: {
        action: 'get_user_meta_info' // 此处参数值必须和钩子名的后缀完全一致
    },
    success: function (res) {
        console.log(res);
    }
});

兼容原实现的修改方案(不推荐,存在安全隐患)

如果你坚持要使用原来的自定义file.php文件,只需要在文件最开头加载WordPress核心即可,修改后代码如下:

<?php
// 路径根据file.php的存放位置调整,示例为file.php放在wp-content/ajax目录下的加载路径
require_once dirname(__FILE__, 3) . '/wp-load.php';

header('Content-Type: application/json');
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$current_user = wp_get_current_user();
echo json_encode($current_user->ID);
wp_die();
?>

内容的提问来源于stack exchange,提问作者user9102437

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:15:03