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
相关产品推荐
相关产品推荐

