
本文介绍如何通过 wordpress 钩子精准控制 rss 输出,仅显示指定自定义文章类型(如 cpt ui 创建的类型)的内容,排除默认文章,实现专属 rss 源。
本文介绍如何通过 wordpress 钩子精准控制 rss 输出,仅显示指定自定义文章类型(如 cpt ui 创建的类型)的内容,排除默认文章,实现专属 rss 源。
在 WordPress 中,默认 RSS 源(如 /feed/)仅包含标准文章(post)类型。若你使用 CPT UI 插件创建了如 product、portfolio 或 testimonial 等自定义文章类型,并希望为其构建完全独立、仅含该类型内容的 RSS 源(例如 /feed/?post_type=product),需避免简单追加类型——因为直接修改主查询可能影响站点其他功能(如首页、搜索或 REST API)。最可靠的方式是利用 pre_get_posts 钩子,在 RSS 请求上下文中重置 post_type 参数,使其严格限定于目标类型。
以下是一个经过生产环境验证的精简方案:
function cptui_add_post_types_to_rss( $query ) {
// 仅对 RSS 请求生效,避免干扰前台页面、后台或 AJAX
if ( ! $query->is_feed() || ! $query->is_main_query() ) {
return;
}
// ✅ 替换为你的实际自定义文章类型标识符(区分大小写)
$custom_types = array( 'product', 'portfolio' );
// ⚠️ 注意:此处不保留 'post',实现「纯自定义类型」RSS
$query->set( 'post_type', $custom_types );
}
add_filter( 'pre_get_posts', 'cptui_add_post_types_to_rss' );将上述代码添加至当前主题的 functions.php 文件,或封装为轻量插件启用。保存后,访问 https://yoursite.com/feed/ 即可获得仅含 product 和 portfolio 的 RSS 输出。
? 关键注意事项:
-
! $query->is_main_query()判断必不可少,否则侧边栏小工具、WP_Query实例等也可能被意外修改; - 若需保留标准文章 + 自定义类型混合输出,可将
$query->set( 'post_type', array_merge( array('post'), $custom_types ) );; - WordPress 原生支持按类型生成 RSS:
/feed/?post_type=product(无需额外代码),但此方式依赖默认查询逻辑,无法全局覆盖/feed/主源;本方案则彻底接管主 RSS 源行为; - 确保目标 CPT 在注册时已声明
'has_archive' => true及'publicly_queryable' => true,否则 RSS 查询可能返回空结果。
最终效果:一个干净、专注、可直接提交至 Feedly 或 Mailchimp 的专属内容源——专为你的产品目录、作品集或客户案例而生。

















