让 WordPress 的 Rss 显示更多或所有的日志

默认 WordPress 提供的 RSS 链接只能获得最近的十篇日志,如果想得到更多,或是用于某种目的而想通过 RSS 获得所有的日志,那恐怕就得做些手脚了,或许还有更简单的办法,只是我这里改了下源代码中的 limit 查询参数。

关于 WordPress 的 Feed 请参考:http://codex.wordpress.org/WordPress_Feeds,用以下代码可以输出你实际的 RSS 的 URL:

URL for RDF/RSS 1.0 feed      <?php bloginfo('rdf_url'); ?>
URL for RSS 0.92 feed         <?php bloginfo('rss_url'); ?>
URL for RSS 2.0 feed          <?php bloginfo('rss2_url'); ?>
URL for Atom feed             <?php bloginfo('atom_url'); ?>
URL for comments RSS 2.0 feed <?php bloginfo('comments_rss2_url'); ?>

在我的机器上永久链接后是用 http://unmi/feed/ 来访问 rss2,模板将会用 wp-includes/feed-rss2.php 文件。要说定位到这段代码还真不简单。
index.php 中 require('./wp-blog-header.php');

wp-blog-header.php 里

再到 wp-includes/templte-loader.php 中

在执行 do_feed() 之前,$wp_query 中早已有了我们想要的数据,所以还应回溯到 wp-blog-header.php 中的 wp() 函数去。wp() 去调用 wp-includes/functions.php 中的

再由 $wp->main($query_vars) 进到 wp-includes/classes.php 中的 main($query_qrgs = '') 函数,其中的

$this->query_posts();

去查询记录,看该 wp-includes/classes.php 的 query_posts() 函数:

再进到 wp-includes/query.php 中的 query($query) 函数

就是这个关键的 wp-includes/query.php 的 &get_posts() 函数,在里面可以看到怎样获得 $limits 参数的,在大约第 2412 行处可以看到:

对,在执行它之前,把 $limits 改了就是,比如

$limits = "limit 0,50";

或者要查询出全部日志的话就让 $limits 为空。实际上,你可能更应该去发掘 $limits 是怎么获得的,比如 step into 到这行代码:

$limits  = apply_filters_ref_array( 'post_limits_request',  array( $limits, &$this ) );

说不定能找到更简单的办法来解决现在的问题。

而追踪代码的同时也发现,全局变量 $wp_query 中有些配置,如:$wp_the_query->query_vars["posts_per_page"],它的默认值是 10,$wp_the_query->query_vars["comments_per_page"] 为 50,还应注意 nopaging 和 paged 这两个参数,它们都为false。不过那些好像不会影响到 RSS 数据的显示,仍然是查询到多数记录输出多少。

对于 WordPress 的 php 代码真不好怎么单步调试,因为 UrlRewrite 之后,浏览器地址栏里的 URL 与文件系统中的 PHP 代码无法匹配到的,所以一路上只能用类似 echo 的办法,具体用的是下面的代码块:

用 log4php 也应该可行的,要放哪声明出一个全局的 $logger,然后四处 global $logger, $logger->debug() 了,但信息还不如 var_dump() 好看。

本文链接 https://yanbin.blog/wordpress-show-all-rss-data/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments