我基本上是在创建一个从 wordpress 获取数据的 iphone 应用程序。 Wordpress 将通过 RSS 提要向 iPhone 应用程序提供音频和视频链接。我的提要和音频播放器运行良好,但似乎找不到与如何创建自定义提要相关的任何内容,我可以在其中指定分页,例如 start=0&items=10。一个插件会很棒,但如果有人有任何想法,我可以用 PHP 编写一些东西。
最佳答案
我将通过更改 WordPress 安装的标准 RSS 提要以响应查询参数传递的限制来回答这个问题。正如您所说,您已经有了一个工作提要,这应该有望为您提供所需的一切。
默认情况下,WordPress 中的标准提要受到设置→阅读页面上的“联合提要显示最新的 X 项”设置的限制,并且没有分页,因为这对于 RSS 提要通常没有意义。这由 WordPress 的 WP_Query::get_posts() 方法控制,在 query.php
中,如果您有兴趣了解内部工作原理。
但是,尽管提要查询的限制设置为 LIMIT 0, X
(其中 X 是上述设置,默认为 10),您可以通过在正确的位置过滤查询来覆盖限制。
例如,过滤器 post_limits
将过滤查询的 LIMIT 子句在它由默认代码为提要设置的点和它运行的时间之间。因此,插件中的以下代码 - 甚至是您主题的 functions.php 中的代码 - 将完全限制您的 RSS 提要中返回的项目:
function custom_rss_limits($limits) {
if (is_feed()) {
// If this is a feed, drop the LIMIT clause completely
return "";
} else {
// It's not a feed; leave the normal LIMIT in place.
return $limits;
}
}
add_filter('post_limits', 'custom_rss_limits');
(在这一点上,我应该提到明显的安全隐患——如果你的博客上有 20,000 篇文章,如果很多人开始抓取你的提要,然后你发送出去,你就会给自己造成大量的服务器负载和带宽所有 20,000 项给所有人。因此,请记住,无论您最终做什么,您可能仍希望强制执行一些硬性限制,以防有人发现您的提要端点可以被要求提供所有内容,例如通过分析来自您的 iPhone 应用程序的流量.)
现在我们要做的就是响应查询参数。首先,我们用 WordPress 注册你的两个查询参数:
function rss_limit_queryvars( $qv ) {
$qv[] = 'start';
$qv[] = 'items';
return $qv;
}
add_filter('query_vars', 'rss_limit_queryvars' );
这允许我们传入
start
和 items
您为 URL 参数建议的变量。我们所要做的就是调整我们原来的
LIMIT
更改功能以响应它们:function custom_rss_limits($limits) {
if (is_feed()) {
global $wp_query;
if (isset($wp_query->query_vars['start']) &&
isset($wp_query->query_vars['items'])) {
// We're a feed, and we got pagination parameters. Override our
// standard limit.
// First convert to ints in case anyone's put something hinky
// in the query string.
$start = intval($wp_query->query_vars['start']);
$items = intval($wp_query->query_vars['items']);
$limits = "LIMIT $start, $items";
} else {
// We weren't passed pagination parameters, so just
// leave the default limits alone.
}
}
return $limits;
}
add_filter('post_limits', 'custom_rss_limits');
你去吧。将最后两个代码块放在 WordPress 上,您现在可以在任何现有提要上使用这样的 URL:
http://example.com/feed/?start=30&items=25
对于此示例,您将获得正常的 RSS 提要,但从项目编号 30 开始有 25 个项目。
...如果您不传递查询参数,一切都会正常工作。
关于php - 如何在 wordpress 中创建带有限制语句的 RSS 提要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9389032/