1. <div id="11111"></div>

    1. <div id="11111"></div>

      1. <div id="11111"></div>

        WordPress实现RSS feed静态化

        日期: 标签:WordPress教程 5 条留言
        如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务:  点此联系我
        文章目录

        提示:如果你的feed订阅地址不是http://域名/feed这样的格式,以下内容就不要看了。

        WordPress的feed地址一般如: http://www.szeverich.net.cn/feed??鬴eed功能后可以方便RSS阅读器进行订阅,让读者及时收到博客的更新信息,但是开放feed后有个坏处就是,RSS订阅器会定时或不定时的地访问你的feed订阅地址,以便查看你的feed是否更新,除了RSS阅读器会经常访问你的feed,各路文章采集器和蜘蛛也会经常来光顾你的feed,而且你还不能限制他们的访问频率。

        因为WordPress提供的feed是动态生成的,虽然有cache功能,但毕竟要运行php代码,feed被频繁访问势必会消耗一定的服务器资源。那我们今天就来讲讲如何实现feed静态化,直接生成一个index.xml文件,放到WordPress根目录下的feed目录,以后访问 http://网站首页/feed 即可直接读取静态的index.xml,无需WordPress动态生成。

        1、禁用默认的feed

        众所周知,feed的地址一旦确定下来,如果随便更改,之前已经订阅过的读者可能不会再收到文章更新的通知,势必会流失很多老读者,所以要实现feed的静态化,前提应该是不更改原先的feed订阅地址,但是原先的feed是与WordPress的rewrite规则绑定的,直接在feed目录下放置xml文件,势必会引起冲突。

        我的上篇文章已经讲了如何彻底移除并关闭WordPress的feed功能,你以为我是故意教你关闭feed功能,闭关锁国,封闭博客与外界的交流吗?这么想你就错了,上篇文章就是为了今天这篇文章准备的。

        所以,第一步就是先按照上篇文章:如何彻底移除并关闭WordPress的Rss Feed,禁用WordPress默认的feed。这一步操作完成后,效果就是打开 http://网站首页/feed,会显示404页面不存在,

        当然,如果直接在网站根目录下创建目录,然后放入index.xml也是可以的。

        2、生成静态feed

        如何生成静态feed呢?这里直接用WordPress自带的wp-includes/feed-rss2.php,我对其做了一些修改:

        点此下载

        下载后解压,得到myrss.php,可以改名后将其上传到WordPress根目录,跟wp-load.php同在一个目录即可。

        3、自动更新静态feed

        静态之所以为静态,就是如果你不改它,它的内容永远都是不变的,不像php文件那样会关联更新。我们希望每次发布文章或页面后,自动更新静态feed,达到静态feed的内容和网站内容同步的效果。我们可以将以下PHP代码放到当前主题的functions.php中:

        function ludou_update_feed($post_ID) {
          if( wp_is_post_revision( $post_ID ) )
            return;
              
          if ( get_post_status( $post_ID ) == 'publish' && $_POST['original_post_status'] != 'publish' ) {
            if ( !defined('ABSPATH') )
              define('ABSPATH', dirname(__FILE__) . '/');
            
            // 如果你修改过 myrss.php 的文件名称,也要修改下面的 myrss.php
            $file_contents = file_get_contents(get_bloginfo( 'wpurl' ).'/myrss.php');
            file_put_contents(ABSPATH."feed/index.xml", $file_contents, LOCK_EX);
           }
        }
        
        add_action('publish_post', 'ludou_update_feed', 16);
        add_action('publish_page', 'ludou_update_feed', 16);

        注意:PHP代码应该放到 <?php?>之间或 <?php 后面!

        到了这一步,操作基本算完成了,在浏览器中打开你的feed地址http://你的网站首页/feed,看看是否可以看到xml代码?不懂的可以看看我的 http://www.szeverich.net.cn/feed/

        如果xml代码显示正常,那所有操作就完成了。如果打开feed地址依然是404页面未找到或者是文件列表,那么你需要继续看第4步的操作。

        4、设置index.xml为默认首页

        有些服务器可能只设置了index.php、index.html为默认首页,这样的话,如果你的feed目录下没有这两个文件的其中之一,只有index.xml,那么直接访问http://你的网站首页/feed就会出现404。解决方法是将index.xml加入到默认首页中。

        nginx服务器的设置方法

        第1步:打开网站配置文件nginx.conf(也可能在vhost目录下,具体咨询服务器管理员)

        第2步:搜索index,找到类似代码:index index.html index.php;,在分号前加上index.xml,类似:
        listen 80;
        server_name ludou.org www.szeverich.net.cn;
        index index.html index.php index.xml;
        root /wp;

        第3步:重启nginx服务即可生效。

        Apache服务器

        编辑网站根目录下的.htaccess(没有就新建一个),查找:DirectoryIndex,看是否能找到类似代码:
        DirectoryIndex index.html index.php

        如有,就在后面加上index.xml,如:
        DirectoryIndex index.html index.php index.xml

        如果找不到DirectoryIndex,那就在.htaccess中加入上面的代码,然后将.htaccess上传到网站根目录下即可。

        -- 完 --

        本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
        原文出处:露兜博客 http://www.szeverich.net.cn/wordpress-feed-static.html
        露兜
        kaapass@outlook.com  QQ 825533758

        业余编程爱好者,主业是淘宝店主,卖些工艺品,感兴趣可以到我的淘宝店看看(旺旺不提供技术咨询):西西弗sisyphe

        5 条留言

        点此留言
        1. WordPress头条

          feed静态化,不错的教程。对于feed访问速度也有帮助吧

        2. 明月登楼

          这个不错,可以有效的减低 WordPress 的性能负载!不错,我试试去!

        3. 闲木鱼

          为什么我照你的步骤做了还是不行呢?

        4. 云落

          正好看到。。。最近网站RRS突然全文输出了。。。。

          ps另外还可以推迟输出
          // 推迟RSS更新
          function publish_later_on_feed($where) {
          global $wpdb;
          if (is_feed()) {
          $now = gmdate('Y-m-d H:i:s');
          $wait = '5'; //时间
          $device = 'MINUTE'; // MINUTE, HOUR, DAY, WEEK, MONTH, YEAR
          $where .= " AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, '$now') > $wait ";
          }
          return $where;
          }
          add_filter('posts_where', 'publish_later_on_feed');

        5. Sam.Z

          feed/index.xml 生成了,但是里面的内容是空白,权限问题?如果能生成文件为什么里面又是空白,唉。

        发表留言

        可以挣钱的游戏 333| 945| 584| 881| 633| 385| 972| 521| 688| 310| 143| 383| 400| 891| 87| 953| 84| 911| 798| 422| 874| 958| 800| 845| 825| 582| 503| 102| 416| 905| 34| 362| 619| 278| 332| 855|