让代码更简单

当前位置:代码狗 > WordPress > WP建站 > 正文

WPJAM分离的代理功能解决WordPress更新问题

重要:本文最后更新于2020-04-01 12:52:47,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

WordPress更新出现429 Too Many Requests怎么解决?出现这个问题一般是因为你的服务器被WordPress屏蔽了,就跟大陆访问不了WordPress官网一样。对于有小飞机的朋友来说手动更新并不难,如果你没有小飞机,可以到这里下载WordPress的所有中文版本WordPress下载。有人觉得手动更新太麻烦,想要解决自动更新错误的问题,那么下面的方案应该适合你。

此程序由我爱水煮鱼发布于WPJAM插件中,为方便没使用WPJAM插件的用户使用,我把它分离了出来,说是分离,其实就是删掉了基于WPJAM的后台配置。重新写了个通用的插件后台,如果你懂代码可以不用后台。

实现原理

将代理程序上传到能访问WordPress官网的服务器上,然后通过pre_http_request过滤器修改WordPress发出的请求。将请求发送到代理程序上处理,再将结果返回给WordPress

实现步骤

插件法

插件在文末,里面有一个proxy.php文件和一个文件夹。将proxy.php上传到能上WordPress官网的服务器上,然后将文件夹上传到你的WordPress网站的插件目录中,启用插件后设置菜单下会有一个代理设置选项,在其中填入proxy.php的网络地址即可。

我测试了下插件下载与WordPress更新,代理后正常。这个插件只会处理发往api.wordpress.org与downloads.wordpress.org的请求,不用担心所有请求都走代理的情况。

WPJAM分离的代理功能解决WordPress更新问题

WPJAM分离的代理功能解决WordPress更新问题

代码法

下载文末的插件包,将里面的proxy.php上传到能上WordPress官网的服务器上,由此得到代理文件的网络地址。然后在你的主题functions.php文件中添加如下代码。

add_filter('pre_http_request', function ($pre, $parsed_args, $url) {
        $host = parse_url($url, PHP_URL_HOST);
        if (!in_array($host, ['api.wordpress.org', 'downloads.wordpress.org'])) {
            return $pre;
        }
        $proxy_url = "你的proxy.php代理文件地址";
        if (!$proxy_url) {
            return $pre;
        }
        return wp_remote_request($proxy_url . '?url=' . urlencode($url), $parsed_args);
    }, 10, 3);

异常现象

部分服务器不能访问WordPress官网,使用代理后你的所有发往api.wordpress.org与downloads.wordpress.org的请求都会超时。比如打开安装插件页面,此页面会请求api.wordpress.org,如果不能访问,将无法显示插件列表。另外,这个proxy.php使用了file_get_contents发起网络请求,部分PHP环境需要配置其支持。另外还会报个警告,不过不影响使用。

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏

评论 5

  1. #2

    下载不了啊

    TT2个月前 (04-11)回复
    • 尴尬了,我自己都找不到了·····

      代码狗1个月前 (04-11)回复
  2. #1

    我也发了这个剥离版的。狗哥还是厉害啊,早知道我不折腾了。不过这个也一般,代理服务器网络不好也白瞎。

    奶爸建网站笔记2个月前 (03-28)回复
    • 我也觉得鸡肋,可就是有人需要

      代码狗2个月前 (03-28)回复
      • 唉,你们俩建站的人都没遇到一堆人问你帮忙下载安装包和插件包?

        缙哥哥2个月前 (03-28)
×

请作者吃根烤肠!

支付宝