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

WordPress页面body含指定类时如何入队样式?

WordPress:仅在特定body类页面加载样式表的问题解决

问题背景

我需要在WordPress网站中,仅给body标签带有page-id-2022类的页面加载指定样式表,目前已经写了样式入队的代码:

add_action( 'wp_enqueue_scripts', function() {
  wp_dequeue_style('my-child');
  wp_enqueue_style('style1_css', '/wp-content/plugins/myplugin/assets/style1.css' , 'all' );
  wp_enqueue_style('style2_css', '/wp-content/plugins/myplugin/assets/style1.css' , 'all' );
}, 1 );

但配套的检测函数始终无法识别body上的page-id-2022类,明明页面body标签确实有这个类,函数却一直提示不存在:

function check_class_in_content($class) {
    if (is_singular()) {
        global $post;
        if (strpos($post->post_content, $class) !== false) {
            return true;
        }
    }
    return false;
}

if (check_class_in_content('page-id-2022')) {
    echo 'Class exists in the content of this page.';
} else {
    echo 'Class does not exist in the content of this page.';
}

错误原因

你的检测逻辑完全错误:page-id-2022是WordPress自动添加到body标签的页面ID类,它不存在于文章的post_content(即编辑器中编写的内容)里,所以用strpos($post->post_content, $class)根本找不到这个类。

解决方法

直接通过WordPress提供的get_body_class()函数获取当前页面的body类数组,再检查目标类是否在数组中即可。同时把样式入队逻辑和检测逻辑整合到同一个钩子中,保证执行顺序正确。

修正后的完整代码

add_action( 'wp_enqueue_scripts', function() {
    // 获取当前页面的body类数组
    $body_classes = get_body_class();
    
    // 检查是否包含目标类
    if (in_array('page-id-2022', $body_classes)) {
        // 取消加载子主题样式
        wp_dequeue_style('my-child');
        // 加载自定义样式(修正原代码中style2的路径错误)
        wp_enqueue_style('style1_css', plugin_dir_url(__FILE__) . 'assets/style1.css', array(), '1.0', 'all');
        wp_enqueue_style('style2_css', plugin_dir_url(__FILE__) . 'assets/style2.css', array(), '1.0', 'all');
    }
}, 10 ); // 建议将优先级改为10(默认值),避免过早执行导致body类未生成

额外提示

  1. 原代码中style2_css错误引用了style1.css的路径,已修正为style2.css,请根据实际文件路径调整。
  2. 使用plugin_dir_url(__FILE__)替代硬编码路径,让代码更具可移植性,避免插件目录变更后路径失效。
  3. 将钩子优先级从1调整为10,确保body类已正确生成后再执行检测,防止因过早执行导致无法获取完整的body类数组。

内容的提问来源于stack exchange,提问作者gwmbox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 04:16:04