如何解决WordPress中PHP会话干扰REST API的运行时错误?
解决WordPress PHP会话干扰REST API/环回请求的问题
方法1:手动在请求前关闭会话
找到主题或插件里调用session_start()的代码块,在发起任何HTTP请求(比如wp_remote_get、wp_remote_post这类WordPress内置HTTP函数)之前,插入session_write_close();。举个例子:
// 先关闭会话,避免冲突 session_write_close(); // 再发起HTTP请求 $response = wp_remote_get('https://your-target-url.com');
要是请求完成后还得用会话,之后再重新调用session_start();就行,但得确保后续没其他HTTP请求会冲突。
方法2:用WordPress钩子自动管理会话
借助http_api_curl钩子,在CURL请求发起前自动关闭会话,请求结束后按需恢复。把下面这段代码加到主题的functions.php或者自定义插件里:
// 请求发起前关闭会话 add_action('http_api_curl', function($handle) { if (session_status() === PHP_SESSION_ACTIVE) { session_write_close(); } }); // 可选:请求完成后恢复会话 add_action('http_api_debug', function($response, $context, $class, $args, $url) { if (session_status() === PHP_SESSION_NONE) { session_start(); } }, 10, 5);
方法3:排查并修复不规范的会话调用
逐个检查激活的插件和当前主题的代码:
- 别在全局范围调用
session_start(),只在需要的时候开启,用完立刻关闭 - 要是必须长时间保持会话,一定要在发起REST API或环回请求前主动关闭会话
方法4:禁用不必要的会话
如果某些插件/主题的会话是多余的,直接删掉对应的session_start()调用就行,但删完要测试功能是否正常。
内容的提问来源于stack exchange,提问作者piyush modi
相关产品推荐
相关产品推荐

