如何在WordPress中按分类选择性加载样式表(适配文章页)
适配文章页与分类归档页的WordPress分类样式表自动加载方案
问题场景
我在WordPress中为不同分类设置差异化外观(主要是背景差异),此前通过多分支if-else判断分类slug加载对应样式表,代码如下:
<?php if (in_category('issue91')) { ?> <link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/style09-1.css" type="text/css" media="screen" /> <?php } elseif (in_category('issue-10-1')) { ?> <link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/style10-1.css" type="text/css" media="screen" /> <?php } elseif (in_category('issue-10-2')) { ?> <link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/style10-2.css" type="text/css" media="screen" /> <?php } ?>
当分类数量较少时该方案可行,但随着分类增加到数十个,我改为通过分类slug自动匹配样式表的方式,代码如下:
<?php $tw_objects = get_queried_object(); $tw_stylesheet = $tw_objects->slug; ?> <link rel="stylesheet" href="<?php bloginfo('template_url'); echo '/tw_styles/' . $tw_stylesheet; ?>.css" type="text/css" media="screen" />
但此代码仅在分类归档页生效,无法作用于分类下的单篇文章页。
解决方案
问题根源在于:单篇文章页中get_queried_object()返回的是文章对象而非分类对象,因此无法直接获取分类slug。需要针对页面类型分别处理:
<?php $tw_stylesheet = ''; // 分类归档页:直接获取当前分类的slug if (is_category()) { $category_obj = get_queried_object(); $tw_stylesheet = $category_obj->slug; } // 单篇文章页:获取文章所属分类的slug(取第一个分类,可根据需求调整) elseif (is_single()) { $post_categories = get_the_category(); if (!empty($post_categories)) { $tw_stylesheet = $post_categories[0]->slug; } } // 仅当获取到有效slug时,加载对应样式表 if (!empty($tw_stylesheet)) { ?> <link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/tw_styles/<?php echo $tw_stylesheet; ?>.css" type="text/css" media="screen" /> <?php } ?>
代码说明
is_category():判断当前是否为分类归档页,此时get_queried_object()返回分类对象,可直接提取slugis_single():判断当前是否为单篇文章页,通过get_the_category()获取文章所属分类列表,取第一个分类的slug(若文章属于多个分类,可修改逻辑优先获取主分类)- 增加空值判断:避免因未获取到slug而加载无效的样式表链接
内容的提问来源于stack exchange,提问作者Dylan Tweney
相关产品推荐
相关产品推荐

