17

在 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; ?>

谢谢!

4

3 回答 3

52

如果你真的,真的需要根据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.

于 2013-02-22T22:28:29.930 回答
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;
});
于 2013-02-22T22:12:30.850 回答
0

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

我首先尝试了这个,但失败了

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

额外的类被添加到 body 标记中,但是当我运行错误日志时,它不在类数组中。所以我确信它后来被添加到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'];
}
于 2018-05-03T10:47:04.200 回答