WordPress中PHP条件判断失效问题求助
解决single_cat_title()条件判断时直接输出的问题
嘿,我懂你碰到的这个坑了——single_cat_title()这个WordPress函数默认是直接把分类标题输出到页面上的,所以你用它做条件判断的时候,它先自顾自把"Wedding"打印出来了,导致你的判断逻辑根本没起作用对吧?别慌,咱们来调整一下代码就能搞定:
核心修复:修改single_cat_title()的输出参数
single_cat_title()有两个参数,第二个参数$display默认是true(直接输出内容),咱们把它改成false,这样函数就会返回标题文本而不是直接输出了。修改后的代码如下:
<div id="content" class="site-content" role="main"> <div class="layout-full"> <header class="entry-header"> <h1 class="entry-title"><?php single_cat_title(); ?></h1> <!-- 这里正常输出分类标题 --> </header> <!-- Wedding 滑块 --> <?php if ( single_cat_title("", false) == "Wedding") { echo do_shortcode('[metaslider id="1710"]'); } ?> <!-- Portrait 滑块 --> <?php if ( single_cat_title("", false) == "Portrait") { echo do_shortcode('[metaslider id="1718"]'); } ?> <!-- Travel 滑块 --> <?php if ( single_cat_title("", false) == "Travel") { echo do_shortcode('[metaslider id="1714"]'); } ?> </div> </div>
更健壮的替代方案:用分类Slug判断
如果担心以后分类标题会修改(比如把"Wedding"改成"婚礼"),用分类的slug来判断会更稳妥——slug一般不会轻易改动,能让代码更健壮。咱们可以用get_queried_object()获取当前分类对象,然后判断slug:
<div id="content" class="site-content" role="main"> <div class="layout-full"> <header class="entry-header"> <h1 class="entry-title"><?php single_cat_title(); ?></h1> </header> <?php $current_cat = get_queried_object(); // 先判断是否是分类页面,避免报错 if ( $current_cat && is_a($current_cat, 'WP_Term') ) { switch($current_cat->slug) { case 'wedding': echo do_shortcode('[metaslider id="1710"]'); break; case 'portrait': echo do_shortcode('[metaslider id="1718"]'); break; case 'travel': echo do_shortcode('[metaslider id="1714"]'); break; // 可以加默认情况,比如显示默认滑块或者什么都不显示 default: // echo do_shortcode('[metaslider id="默认ID"]'); break; } } ?> </div> </div>
这样不管分类标题怎么改,只要slug不变,滑块的显示逻辑就不会出问题,而且用switch结构比多个if看起来更整洁。
内容的提问来源于stack exchange,提问作者Sourabh
相关产品推荐
相关产品推荐

