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类未生成
额外提示
- 原代码中
style2_css错误引用了style1.css的路径,已修正为style2.css,请根据实际文件路径调整。 - 使用
plugin_dir_url(__FILE__)替代硬编码路径,让代码更具可移植性,避免插件目录变更后路径失效。 - 将钩子优先级从
1调整为10,确保body类已正确生成后再执行检测,防止因过早执行导致无法获取完整的body类数组。
内容的提问来源于stack exchange,提问作者gwmbox
相关产品推荐
相关产品推荐

