WordPress隐藏services自定义文章类型(CPT)不生效,求协助
解决WordPress隐藏自定义文章类型(services)的问题
你当前的代码只实现了把services文章排除出搜索结果,这和“隐藏整个自定义文章类型”的需求不匹配,所以没达到效果。要彻底隐藏services CPT,需要修改几个核心参数,确保它既不能被前台访问,也不会生成可访问的链接。
问题分析
exclude_from_search = true 仅仅是让services类型的文章不显示在站点搜索结果里,但它的归档页(/services/)和单页(/services/washing/)依然可以正常访问,也不会移除对应的重写规则,所以你的需求没被满足。
解决方案
根据services CPT的注册方式,分两种情况处理:
情况1:你自己注册的services CPT
直接修改注册代码,调整关键参数:
function register_services_cpt() { $args = array( 'label' => 'Services', 'public' => false, // 核心:设为false,标记为非公开 'publicly_queryable' => false, // 禁止通过WP_Query查询访问 'show_ui' => true, // 保留后台编辑入口,不需要则设为false 'show_in_menu' => true, 'query_var' => false, // 禁用query变量,避免通过?post_type=services访问 'rewrite' => false, // 禁用重写规则,不会生成/services/这类链接 'capability_type' => 'post', 'has_archive' => false, // 禁用归档页 'hierarchical' => false, 'menu_position' => null, 'supports' => array( 'title', 'editor', 'thumbnail' ), ); register_post_type( 'services', $args ); } add_action( 'init', 'register_services_cpt' );
情况2:services CPT由插件/主题注册
如果无法直接修改注册代码,用init钩子修改已注册的CPT参数:
add_action( 'init', 'update_my_custom_type', 99 ); function update_my_custom_type() { global $wp_post_types; if ( post_type_exists( 'services' ) ) { // 标记为非公开 $wp_post_types['services']->public = false; $wp_post_types['services']->publicly_queryable = false; // 禁用query变量和重写规则 $wp_post_types['services']->query_var = false; $wp_post_types['services']->rewrite = false; // 保留原有的排除搜索设置 $wp_post_types['services']->exclude_from_search = true; // 若不需要在后台显示services,取消下面两行注释 // $wp_post_types['services']->show_ui = false; // $wp_post_types['services']->show_in_menu = false; } }
关键步骤
修改代码后,必须进入WordPress后台的 设置→固定链接,点击「保存更改」按钮刷新重写规则,这样之前的/services/washing/这类链接会返回404,彻底无法访问。
内容的提问来源于stack exchange,提问作者Warda
相关产品推荐
相关产品推荐

