You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:41:12