我基本上是在创建一个iphone应用程序,它可以从wordpress获取数据。 Wordpress将通过RSS源向iphone应用提供音频和视频链接。我有饲料和音频播放器工作得很好,但似乎无法找到任何与如何创建自定义Feed有关的内容,我可以指定分页,如start = 0& items = 10。插件会很棒,但如果有人有任何想法,我可以用PHP编写代码。
答案 0 :(得分:6)
我将通过更改WordPress安装的标准RSS提要来回答此问题,以响应查询参数传递的限制。正如你所说,你已经有了一个有效的饲料,这应该可以为你提供所需的一切。
默认情况下,WordPress中的标准Feed受设置→阅读页面上的“联合供稿显示最新的 X 项目”设置的限制,并且未被取消,因为这通常不会理解RSS提要。这是由WordPress的WP_Query :: get_posts()方法在query.php
中控制的,如果你有兴趣看看内部是如何工作的。
但是,虽然Feed查询的限制设置为LIMIT 0, X
(其中X是上述设置,默认为10),但您可以通过在正确的位置过滤查询来覆盖限制。
例如,过滤器post_limits
将在Feed的默认代码和运行时间之间设置的点之间过滤查询的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');
(此时我应该提到明显的安全隐患 - 如果你的博客上有2万个帖子,如果有很多人开始抓住你的Feed,你会给自己带来很多服务器负载和带宽,以及你向所有人发送了所有20,000件商品。因此,请记住,无论你最终做什么,你可能仍然想要强制执行一些硬限制,以防有人确定你的Feed端点可以被要求一切,比如分析iPhone应用程序的流量。)
现在我们所要做的就是回应查询参数。首先,我们使用WordPress注册您的两个查询参数:
function rss_limit_queryvars( $qv ) {
$qv[] = 'start';
$qv[] = 'items';
return $qv;
}
add_filter('query_vars', 'rss_limit_queryvars' );
这样我们就可以传递您为网址参数建议的start
和items
个变量。
我们所要做的就是调整原来的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上抛出最后两个代码块,现在您可以在任何现有的Feed上使用这样的URL:
http://example.com/feed/?start=30&items=25
对于此示例,您将获得正常的RSS提要,但是从项目编号30开始有25个项目。
...如果不传递查询参数,一切都会正常工作。