自定义主题更新遇未授权问题:如何适配基础认证?
解决Plugin Update Checker适配服务器基础认证的问题
我刚好处理过类似的问题,Plugin Update Checker其实提供了专门的钩子来帮我们添加HTTP认证信息,解决这个401 Unauthorized错误很简单,跟着下面的步骤来就行:
1. 生成基础认证的编码字符串
基础认证的请求头格式是 Authorization: Basic <Base64编码的用户名:密码>,你需要先把服务器认证凭据转换成对应的编码字符串。
可以用PHP代码直接生成,把下面的your_username和your_password替换成实际的认证信息:
echo base64_encode('your_username:your_password');
运行这段代码后得到的字符串就是我们需要的编码值。
2. 通过过滤器添加认证请求头
Plugin Update Checker提供了puc_request_args过滤器,我们可以用它来修改下载请求的参数,添加上认证头。
把下面的代码添加到你的主题functions.php文件,或者自定义插件里:
add_filter('puc_request_args', 'add_basic_auth_to_theme_update', 10, 2); function add_basic_auth_to_theme_update($request_args, $request_url) { // 只针对你的主题更新包URL生效,避免影响其他请求 $theme_update_url = 'https://your-server-url/path/to/your-theme.zip'; if (strpos($request_url, $theme_update_url) !== false) { // 替换成你刚才生成的Base64编码字符串 $auth_credentials = base64_encode('your_username:your_password'); $request_args['headers']['Authorization'] = 'Basic ' . $auth_credentials; } return $request_args; }
安全提示(非常重要)
不要直接把明文的用户名和密码写在代码里!建议通过WordPress后台添加一个私密设置项来存储这些凭据,然后用get_option()来获取:
// 假设你已经在后台保存了名为theme_update_auth_user和theme_update_auth_pass的选项 $auth_user = get_option('theme_update_auth_user'); $auth_pass = get_option('theme_update_auth_pass'); $auth_credentials = base64_encode("$auth_user:$auth_pass");
3. 测试验证
修改完成后,回到WordPress后台的更新页面,再次尝试更新主题。如果配置正确,应该就能正常下载并更新了。
你也可以先通过curl命令手动测试一下请求是否有效:
curl -H "Authorization: Basic <你的编码字符串>" https://your-server-url/path/to/your-theme.zip
如果能正常下载主题压缩包,说明认证配置没问题。
内容的提问来源于stack exchange,提问作者Raf
相关产品推荐
相关产品推荐

