禁用/Feed/自定义帖子类型

时间:2022-02-07 作者:Steve

我们的自定义帖子类型帖子的源代码中有一个额外的提要:

www.example/post-type/post/feed/

我想删除多余的/feed/ 从我们的CPT生成404。

register_post_type 函数引用,我已尝试添加\'rewrite\' => array(\'feeds\' => false), 收件人:

register_post_type(\'templates\',
    array(
    \'labels\' => array(
            \'name\' => __( \'Templates\' ),
            \'singular_name\' => __( \'Template\' ),
            \'add_new\' => __( \'Add New\' ),
            \'add_new_item\' => __( \'Add New Template\' ),
            \'edit\' => __( \'Edit\' ),
            \'edit_item\' => __( \'Edit Template\' ),
            \'new_item\' => __( \'New Template\' ),
            \'view\' => __( \'View Template\' ),
            \'view_item\' => __( \'View Template\' ),
            \'search_items\' => __( \'Search Templates\' ),
            \'not_found\' => __( \'No Templates found\' ),
            \'not_found_in_trash\' => __( \'No Templates found in Trash\' ),
            \'parent\' => __( \'Parent Templates\' ),
        ),
      \'public\' => true,
      \'show_ui\' => true,
      \'exclude_from_search\' => true,
      \'hierarchical\' => true,
      \'supports\' => array( \'title\', \'editor\', \'thumbnail\',\'page-attributes\' ),
      \'rewrite\' => array(\'feeds\' => false),
      \'query_var\' => true
    )
  );
}
但这并没有解决问题。

感谢您的帮助。

3 个回复
最合适的回答,由SO网友:Steve 整理而成

从…起this post, 我补充道

remove_action( \'wp_head\', \'feed_links_extra\', 3 );
给我们的孩子主题functions.php.

我们的SEO经理同意这样做也会删除类别的提要。

SO网友:cjbj

如果你深入研究它的工作原理,你最终会发现set_props. 在该函数的底部,您可以看到该设置rewrite\' => array(\'feeds\' => false) 将被解释为“无重写”,意味着将使用默认值。此外,如果尚未设置has_archive 参数WP不知道填充提要的内容。这就是导致你404的原因。

也就是说,您需要的是一个拦截查询的函数\\feed\\ 在他们导致404之前。毕竟,你不能阻止人们在浏览器窗口中键入url,即使有一种方法可以阻止WP生成url。所以我会做这样的检查:

add_action (\'template_redirect\',\'wpse402292_redirect_feed\');
function wpse402292_redirect_feed() {
  if (is_feed (array (\'post\',\'your-custom-post-type-name\')))
     wp_redirect( home_url( \'\' ) ); // or somewhere else
  }

SO网友:KNT111_WP

将此粘贴到函数中。php并替换您的cpt slug。

function wpse_191804_pre_get_posts( $query ) 
{
  // only for feeds
  if( !$query->is_feed || !$query->is_main_query() )
    return query;

  $exclude = \'your-cpt\';
  $post_types = $query->get(\'post_type\');

  if (($key = array_search($exclude, $post_types)) !== false)
    unset($post_types[$key]);

    $query->set( \'post_type\', $post_types );

    return $query;
}

add_action( \'pre_get_posts\', \'wpse_191804_pre_get_posts\' );