Php 如何在wordpress中创建带有限制语句的RSS提要
我基本上是在创建一个iphone应用程序,从wordpress获取数据。Wordpress将通过RSS源向iphone应用程序提供音频和视频链接。我的feed和音频播放器工作得很好,但似乎找不到任何与如何创建自定义feed相关的内容,我可以在其中指定分页,如start=0&items=10。插件很好,但如果有人有任何想法,我可以用PHP编写一些东西。我将通过更改WordPress安装的标准RSS提要来回答这个问题,以响应查询参数传递的限制。正如您所说,您已经有了一个工作提要,这将有望为您提供所需的一切 默认情况下,WordPress中的标准提要受设置的限制。联合提要在设置中显示最新的X项→阅读页面,并且不激动,因为这对于RSS提要通常没有意义。这是由WordPress在Query.php中的WP_Query::get_posts方法控制的,如果您有兴趣了解内部工作方式的话 但是,尽管提要查询的限制设置为限制0,X,其中X是上述设置,默认为10,但您可以通过在正确的位置过滤查询来覆盖限制 例如,filter post_limits将在feed的默认代码设置的点和运行时间之间过滤查询的LIMIT子句。因此,插件中的以下代码——甚至是主题的functions.php中的代码——将完全取消对RSS提要中返回的项目的限制:Php 如何在wordpress中创建带有限制语句的RSS提要,php,ios,wordpress,Php,Ios,Wordpress,我基本上是在创建一个iphone应用程序,从wordpress获取数据。Wordpress将通过RSS源向iphone应用程序提供音频和视频链接。我的feed和音频播放器工作得很好,但似乎找不到任何与如何创建自定义feed相关的内容,我可以在其中指定分页,如start=0&items=10。插件很好,但如果有人有任何想法,我可以用PHP编写一些东西。我将通过更改WordPress安装的标准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');
在这一点上,我应该提到明显的安全问题——如果你的博客上有20000篇文章,如果有很多人开始抓取你的提要,你会给自己造成大量的服务器负载和带宽,而你会将所有20000篇文章发送给所有人。因此,请记住,无论你最终做什么,你可能仍然希望强制执行一些硬限制,以防有人发现你的提要端点可以被要求提供一切,比如通过分析iPhone应用程序的流量
现在我们要做的就是响应查询参数。首先,我们向WordPress注册两个查询参数:
function rss_limit_queryvars( $qv ) {
$qv[] = 'start';
$qv[] = 'items';
return $qv;
}
add_filter('query_vars', 'rss_limit_queryvars' );
这允许我们传入您为URL参数建议的start和items变量
我们所要做的就是调整我们原来的极限变化函数以响应它们:
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提要,但其中有25个条目从条目号30开始
…如果不传递查询参数,一切都会正常工作。我将通过更改WordPress安装的标准RSS提要来回答这个问题,以响应查询参数传递的限制。正如您所说,您已经有了一个工作提要,这将有望为您提供所需的一切 默认情况下,WordPress中的标准提要受设置的限制。联合提要在设置中显示最新的X项→阅读页面,并且不激动,因为这对于RSS提要通常没有意义。这是由WordPress在Query.php中的WP_Query::get_posts方法控制的,如果您有兴趣了解内部工作方式的话 但是,尽管提要查询的限制设置为限制0,X,其中X是上述设置,默认为10,但您可以通过在正确的位置过滤查询来覆盖限制 例如,filter 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');
在这一点上,我应该提到明显的安全问题——如果你的博客上有20000篇文章,如果有很多人开始抓取你的提要,你会给自己造成大量的服务器负载和带宽,而你会将所有20000篇文章发送给所有人。因此,请记住,无论你最终做什么,你可能仍然希望强制执行一些硬限制,以防有人发现你的提要端点可以被要求提供一切,比如通过分析iPhone应用程序的流量
现在我们要做的就是响应查询参数。首先,我们向WordPress注册两个查询参数:
function rss_limit_queryvars( $qv ) {
$qv[] = 'start';
$qv[] = 'items';
return $qv;
}
add_filter('query_vars', 'rss_limit_queryvars' );
这允许我们传入您为URL参数建议的start和items变量
我们所要做的就是调整我们原来的极限变化函数以响应它们:
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提要,但其中有25个条目从条目号30开始
…如果你不知道,爸爸
在查询参数中,一切正常。没问题。它应该运作良好;我在本地对它进行了测试,将精确的代码填充到functions.php中,我无法想象它在插件中不起作用。我认为我正在使用干净、经批准的方法来完成我在这里所做的一切,因此它应该继续与未来版本的WordPress合作。让我知道你进展如何!没问题。它应该运作良好;我在本地对它进行了测试,将精确的代码填充到functions.php中,我无法想象它在插件中不起作用。我认为我正在使用干净、经批准的方法来完成我在这里所做的一切,因此它应该继续与未来版本的WordPress合作。让我知道你进展如何!