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

标签 php ios wordpress

我基本上是在创建一个从 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' );

这允许我们传入 startitems您为 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/

相关文章:

php - Wordpress 数据库类 - MySQL Type Bit

php - 如何从 Post 中获取 Yoast Meta 而不是 Wordpress Meta?

php代码拒绝将值插入数据库

javascript - Jquery 多选 - 切换隐藏 optgroup 问题

php - 将基于 PHP/MySQL 的网站迁移到云服务器

php - 使用 .htaccess 重定向一个类别并将其发布到一个新的 URL

ios - Coredata后台保存、同步策略和冲突解决

iphone - 我无法在 UITabBar 中重新排列 UITabBarItem

iphone - 应用内购买免费订阅提示用户分享信息

wordpress - Woocommerce 操作钩子(Hook)在订阅续订时执行功能