iframe内调用WordPress REST API及判断用户登录状态问题咨询
问题解答
1. 调用is_user_logged_in()报错的原因
is_user_logged_in()是WordPress的PHP后端函数,只能在WordPress服务器环境中运行。你的React应用是前端代码,运行在用户浏览器的iframe里,和WP后端完全处于隔离环境,自然无法直接调用PHP函数,这是前后端环境差异导致的必然错误。
要判断用户是否登录WP站点,必须通过WordPress REST API实现:
- 调用
/wp-json/wp/v2/users/me接口:用户已登录时返回当前用户信息,未登录则返回401未授权状态码。 - 注意:该接口依赖Cookie传递登录状态,需确保iframe域名与WP站点域名同源,或WP已配置正确的跨域规则。
2. 代码调用REST API返回301的解决方法
Postman正常但代码返回301,通常是以下问题:
- URL格式问题:WP REST API接口URL末尾必须加斜杠(比如
.../wp-json/wp/v2/pages/),若代码中遗漏斜杠,WP会自动重定向到带斜杠的地址,返回301。 - 域名/协议不匹配:如果WP站点强制HTTPS或www域名,但代码中用了HTTP或非www域名,会触发重定向。检查代码请求URL是否和Postman中的完全一致(包括协议、域名、路径)。
- 跨域配置缺失:若React应用和WP站点不同源,需在WP端配置CORS规则,在主题
functions.php中添加:add_action('rest_api_init', function () { remove_filter('rest_pre_serve_request', 'rest_send_cors_headers'); add_filter('rest_pre_serve_request', function ($value) { header('Access-Control-Allow-Origin: https://你的React应用域名'); header('Access-Control-Allow-Methods: GET, POST, OPTIONS'); header('Access-Control-Allow-Credentials: true'); return $value; }); });
3. iframe内能否使用WordPress REST API?
完全可以,但需满足几个前提:
- WP站点的REST API处于启用状态(默认开启)。
- 处理好跨域问题:不同源时需在WP端配置CORS规则,且前端请求要携带
credentials: 'include'以传递登录Cookie。 - 请求URL格式正确,避免触发重定向(如带斜杠、协议域名匹配)。
内容的提问来源于stack exchange,提问作者hansvdzz
相关产品推荐
相关产品推荐

