禁用特定自定义帖子类型的提要

时间:2013-02-28 作者:mate64

我想删除特定自定义帖子类型的提要。大多数推荐的方法都不干净。似乎有一个选项叫做$args->feeds 但这在register_post_type() 作用

 register_post_type(
  ...
   \'rewrite\' => array(\'slug\' => \'slug/%term&\', 
                      \'with_front\' => false,
                      \'feeds\' => false), // Remove feed rewrite-rules?
  ...
 );
来源:第1324行-/wp包括/张贴。php(Wordpress 3.5)

我正在寻找一种解决方案,以禁用内部规则生成$wp_rewrite->rules.

1 个回复
SO网友:Matt van Andel

查看register_post_type() 函数,似乎WordPress使用isset() 检查源参数,而不是empty(), 意味着false 值将返回true. 要解决此问题,可以尝试设置\'feeds\' => null 然后从设置>永久链接中刷新重写规则(记住重复两次,以克服一个奇怪的怪癖)。

或者,您可以在任何其他页面(包括提要)有机会加载之前关闭它。。。

do_action(\'wp\',\'kill_feeds\',-1);
function kill_feeds(){
    if ( is_feed( array(\'post\',\'my-custom-type\') ) ) {
        exit;
    }
}
这应该做的是检测当前请求是否是feed(您指定的特定post类型),如果是,则停止任何进一步的输出。

如果你真的想发疯,你可以重定向到你的网站404页。:-)

最后,如果所有这些都失败了,您可以手动修改重写规则。这个rewrite_rules_array 过滤器公开整个重写规则数组,您可以使用一些regex魔术来删除任何适用的提要规则。假设你的帖子是“foo”,这可能看起来像。。。

add_filter(\'rewrite_rules_array\', \'kill_feed_rewrites\');
function kill_feed_rewrites($rules){
    foreach ($rules as $rule => $rewrite) {
        if ( preg_match(\'/^foo.*(feed)/\',$rule) ) {
            unset($rules[$rule]);
        }
    }
    return $rules;
}
Feed引用,规则本身看起来像这样。。。

\'foo/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\' => string \'index.php?attachment=$matches[1]&feed=$matches[2]\'

结束

相关推荐

FETCH_FEED:按显示顺序检索条目,而不是按时间顺序

我正在使用WP函数fetch\\u feed来检索提要并显示其项目。 <?php /* include the required file */ include_once(ABSPATH . WPINC . \'/feed.php\'); /* specify the source feed */ $rss = fetch_feed(\'FEED_URL\'); /* checks obj. is created */