如何在Wordpress中检查body_class()中的类

时间:2013-02-22 21:58:29

标签: php wordpress

在Wordpress header.php中,我有

<body <?php body_class($class); ?>>

如何检查特定类是否存在,然后加载标记作为结果? 对于前。

<body class"home logged-in">

<?php if $class == 'home' ?>
    <div class="home"></div>
<? else : ?>
    <div class="internal-page"></div>
<? endif; ?>

谢谢!

3 个答案:

答案 0 :(得分:35)

如果您确实需要根据body_class类使用不同的标记,请使用get_body_class

$classes = get_body_class();
if (in_array('home',$classes)) {
    // your markup
} else {
    // some other markup
}

但是可能有更好的方法来做到这一点,比如@ Rob对Conditional Tags的建议。这些映射与body_class使用的类非常接近。

答案 1 :(得分:1)

您可以使用过滤器body_class访问add_filter('body_class', function ...)但是,我认为您采取了错误的方法。为什么不用css来满足你的需求呢?例如,.home>div { /* home styles */ }

或者您可以加载不同的样式表

add_filter('body_class', function($classes) {
    if (in_array('home', $classes)) {
        wp_enqueue_style('home');
    }
    return $classes;
});

答案 2 :(得分:0)

我遇到了与使用不同模板创建页面相同的问题,但每个页面上的自定义子菜单需要相同。

我首先尝试了这个失败的

<body <?php body_class( 'extra-class' ); ?>>

额外的类被添加到body标签中,但是当我运行错误日志时,它不在classes数组中。所以我确信它后来被添加到body标签中。

这个解决方案对我有用:

functions.php

$GLOBALS['extraBodyClass'] = '';

在模板文件中

<?php $GLOBALS['extraBodyClass'] = 'extra-class' ?> - 模板文件中的第一行

<body <?php body_class( $GLOBALS['extraBodyClass'] ); ?>> - 在模板名称声明

之后

header.php档案

$classes = get_body_class();
if($GLOBALS['extraBodyClass']){
   $classes[] = $GLOBALS['extraBodyClass'];
}