WordPress中is_page函数用通配符匹配category子页面的问题
搞定WordPress特定前缀页面的条件判断问题
嘿,我知道你现在卡在这儿了——用is_page('category/*')想匹配所有category开头的页面,但完全没效果还没报错对吧?其实原因很简单:is_page()函数根本不支持通配符,它只能精确匹配页面的ID、slug或者标题,所以你写的*对它来说就是字符串的一部分,自然不会生效。
下面给你几个实用的解决方案,按需选就行:
方案1:匹配页面slug前缀
如果你的页面slug都是category-xxx这种格式(比如category-product、category-service),可以直接获取当前页面的slug来判断:
<?php // 拿到当前页面的slug $current_slug = get_post_field('post_name', get_queried_object()); // PHP 8.0及以上用这个,简洁直观 if (str_starts_with($current_slug, 'category-')) : ?> <!-- 这里放你要展示的内容 --> <?php endif; ?>
要是你的PHP版本低于8.0,就用substr()做兼容(9是category-的字符长度):
<?php $current_slug = get_post_field('post_name', get_queried_object()); if (substr($current_slug, 0, 9) === 'category-') : ?> <!-- 你的内容 --> <?php endif; ?>
方案2:匹配URL路径前缀
如果你的页面URL是你的域名/category/xxx这种结构(比如设置了父页面或者自定义路径),可以直接检查请求的URI:
<?php // 获取当前请求的路径,比如'/category/xxx' $current_uri = $_SERVER['REQUEST_URI']; // 判断路径是否以'/category/'开头 if (str_starts_with($current_uri, '/category/')) : ?> <!-- 要显示的内容 --> <?php endif; ?>
或者用WordPress自带的get_permalink()来判断,兼容性更好:
<?php $current_link = get_permalink(); // 检查链接里是否包含'/category/' if (strpos($current_link, '/category/') !== false) : ?> <!-- 你的内容 --> <?php endif; ?>
方案3:如果是分类归档页面(不是普通Page)
哦对了,要是你其实想判断的是分类归档页面(比如category分类下的所有归档页),那别用is_page()了,直接用is_category()——它支持通配符:
<?php // 匹配所有slug以'category'开头的分类归档 if (is_category('category*')) : ?> <!-- 分类归档页面的专属内容 --> <?php endif; ?>
注意这个是针对分类归档的,和普通的Page页面不是一回事,别搞混啦~
最后提个小提醒:测试的时候记得清一下WordPress缓存,有时候缓存会让你的判断逻辑不生效哦!
内容的提问来源于stack exchange,提问作者propertunity
相关产品推荐
相关产品推荐

