如何将可选菜单css类添加到body_class?

时间:2013-03-27 14:18:08

标签: wordpress

我正在试图弄清楚如何将菜单类(admin中的可选字段)添加到body_class,因为我想在页面的其他元素上使用菜单项的颜色:

/** Add nav menu css class to body class */
function add_nav_menu_css( $classes ) {
    $classes[] = ‘optional-menu-class’;
    return $classes;
}
add_filter( ‘body_class’, ‘add_nav_menu_css’ );

应该替换'optional-menu-class'?

2 个答案:

答案 0 :(得分:1)

我能找到的唯一方法是使用wp_get_nav_menu_items($menuID)

我使用id

的菜单7对其进行了测试
$items = wp_get_nav_menu_items( 7 );
foreach ($items as $i) {
    echo $i->classes[0];
}

输出我在外观菜单页面上输入的sample-page-class

所有菜单类都作为类存储在函数wp_get_nav_menu_items中,因此您可以使用foreach将其循环出来,就像我上面所做的那样。

然后将该数据传输到body_class

进一步解释:

因此,functions.php中的body_class过滤器应该

add_filter('body_class','add_nav_menu_css');
function add_nav_menu_css($classes) {

        $items = wp_get_nav_menu_items( 7 ); // change to id of your menu

        foreach ($items as $i) {
                $menuClasses .= $i->classes[0].' ';
        }

        $classes[] = $menuClasses;


        return $classes;
}

仅针对当前类编辑

输入到functions.php页面

add_filter('body_class','my_class_names');
function my_class_names($classes) 
{
        $items = wp_get_nav_menu_items( 7 ); //change to suit your menu id
          foreach ($items as $item):
                $menuClasses = $item->classes;
                $objectId = $item->object_id.' ';

                if ( is_page($item->object_id) ):
                    $current[] = $menuClasses;
                endif;



          endforeach;

        $classes[] =  $current[0][0];


        return $classes;
}

文档为here

答案 1 :(得分:0)

如果要将自定义类添加到body标签,只需使用body类

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

其中'class-name'是您的自定义类, 如果您希望根据或页面/帖子进行更改,只需将其添加到header.php

即可
<?php
if(is_page('your-page-name')){// or post
  $body_class = 'your-custom-page-class';
}
?>
<body <?php body_class($class_name); ?>>

您也可以根据类别名称更改课程。

<?php
if( !is_front_page() && is_category() || is_single() ){
   // category single name
   $cat_name = single_cat_title('',false);
   // category id from category name
   $cat_id = get_category_id($cat_name);
   $body_class = $cat_name;
}
?>
<body <?php body_class($body_class); ?>>

希望这对你有用。

中号

ps:刚看到你的更新 看看这里, https://wordpress.stackexchange.com/questions/20110/add-custom-class-to-wp-nav-menu-using-filter-hook-nav-menu-css-class