WordPress中如何判断页面为ID8194父页的子级及同级以隐藏代码
页面代码隐藏的判断逻辑调整方案
原逻辑的失效原因
你当前使用的if ( get_post_field( 'post_parent' ) != 8194 )判断,仅会校验当前页面的直接上级ID,只能命中ID为8194的第一层直属子页面。由于post_parent字段只存储当前页面的直接上级信息,当页面嵌套到更深层级(也就是你提到的所有需要隐藏的同层级兄弟页面)时,字段值就不再是8194,原逻辑自然无法识别并触发隐藏效果。
调整的核心思路
跳出只判断直接父级的局限,沿着页面层级关系向上全链路追溯,只要当前页面的任意一级祖先节点是ID为8194的页面,就将其纳入隐藏范围,即可覆盖整棵8194分支下的所有页面,不受嵌套深度的影响。
具体实现代码
WordPress自带get_post_ancestors()函数,会返回当前页面从直接父级到顶级父级的所有祖先页面ID列表,基于该函数调整判断逻辑即可:
// 获取当前页面的全量祖先ID列表 $current_page_ancestors = get_post_ancestors( get_the_ID() ); // 定义隐藏规则:当前页面属于8194整棵分支(含8194本身)时隐藏展示代码 $should_hide_code = in_array( 8194, $current_page_ancestors ) || get_the_ID() == 8194; // 替换原判断逻辑:仅在不需要隐藏时输出目标展示代码 if ( ! $should_hide_code ) { // 此处放置原本要展示的代码片段 }
规则灵活调整
- 如果不需要在8194页面本身隐藏代码,仅需要在它的所有后代页面隐藏,删掉判断条件里的
get_the_ID() == 8194即可:
$current_page_ancestors = get_post_ancestors( get_the_ID() ); $should_hide_code = in_array( 8194, $current_page_ancestors ); if ( ! $should_hide_code ) { // 目标展示代码 }
方案说明
get_post_ancestors()直接读取WordPress存储的页面父子关系数据,不受页面别名、路径调整的影响,比基于URL匹配的判断逻辑更稳定。- 无论页面嵌套多少层级,只要归属8194的分支,都会被准确识别,不会遗漏任何层级的子、孙、曾孙页面。
内容的提问来源于stack exchange,提问作者leandroprz
相关产品推荐
相关产品推荐

