Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在wordpress中创建带有限制语句的RSS提要_Php_Ios_Wordpress - Fatal编程技术网

Php 如何在wordpress中创建带有限制语句的RSS提要

Php 如何在wordpress中创建带有限制语句的RSS提要,php,ios,wordpress,Php,Ios,Wordpress,我基本上是在创建一个iphone应用程序,从wordpress获取数据。Wordpress将通过RSS源向iphone应用程序提供音频和视频链接。我的feed和音频播放器工作得很好,但似乎找不到任何与如何创建自定义feed相关的内容,我可以在其中指定分页,如start=0&items=10。插件很好,但如果有人有任何想法,我可以用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提要中返回的项目的限制:

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合作。让我知道你进展如何!