自定义分类显示不同头部菜单求助:PHP代码无法匹配分类
解决Toolset分类法匹配头部菜单的问题
嘿,我来帮你排查一下这个分类匹配的问题!你遇到的情况大概率是语法错误、分类法slug拼写不对,或者代码逻辑没覆盖到所有需要的场景,下面一步步来解决:
1. 先修复最明显的语法错误
你第一个代码片段里少了一个闭合括号,导致PHP解析失败,正确的写法应该是:
<?php if( has_term('skaga', 'hoteller') ) { get_template_part( 'includes/partials/header/header-menu-skaga' ); }?>
注意has_term()后面要加),不然代码会直接报错不执行。
2. 确认分类法slug是否正确
你说创建的分类法是hotels,但代码里用的是hoteller——这很可能是问题核心!去WP后台的Toolset分类法设置里,查看这个分类法的slug是不是hotels(很多时候分类法名称和slug可能不一致,比如名称是“酒店”,slug是hotels)。如果slug确实是hotels,那代码里要改成:
<?php if( has_term('skaga', 'hotels') ) { get_template_part( 'includes/partials/header/header-menu-skaga' ); }?>
3. 匹配整个hotels分类法下的所有内容
如果你的需求是**所有属于hotels分类法的内容(不管是哪个具体的酒店分类项)**都显示专属菜单,那上面匹配单个分类项的代码就不够用了,需要覆盖分类归档页和单文章页两种场景:
<?php // 检查当前页面是hotels分类归档页,或是单页文章属于hotels分类法下的任何术语 if ( is_tax('hotels') || ( is_singular() && has_term( '', 'hotels' ) ) ) { // 加载酒店专属的头部模板(包含菜单、Logo、预订按钮) get_template_part( 'includes/partials/header/header-menu-hotels' ); } else { // 加载默认头部菜单 get_template_part( 'includes/partials/header/header-menu-default' ); } ?>
解释一下:
is_tax('hotels'):匹配hotels分类法的归档页面is_singular():确保当前是文章/自定义文章类型的单页has_term( '', 'hotels' ):检查当前文章是否属于hotels分类法下的任意一个分类项
4. 额外排查点
如果还是不行,可以做个简单的测试,在代码里加个输出看看是否匹配成功:
<?php // 测试:输出当前分类法信息 echo '当前分类法slug:'; var_dump( get_query_var('taxonomy') ); echo '当前文章所属分类:'; var_dump( wp_get_post_terms(get_the_ID(), 'hotels') ); // 再执行原有逻辑 if ( is_tax('hotels') || ( is_singular() && has_term( '', 'hotels' ) ) ) { get_template_part( 'includes/partials/header/header-menu-hotels' ); } else { get_template_part( 'includes/partials/header/header-menu-default' ); } ?>
这样就能看到实际的分类数据,更容易定位问题啦。
内容的提问来源于stack exchange,提问作者webmaster touche
相关产品推荐
相关产品推荐

