如何在wordpress ul容器周围添加div

时间:2012-04-25 19:08:24

标签: wordpress function menu html-lists

Wordpress在这个ul标签中输出我的子菜单......

<ul class="sub-menu">

如何围绕它包装一个简单的div?

最好通过functions.php来实现,但jquery也可以。

2 个答案:

答案 0 :(得分:17)

虽然使用类似jQuery的东西来包装你的子菜单会很容易,但为此目的使用jQuery并不是一个好习惯。将它放在functions.php中:

class Child_Wrap extends Walker_Nav_Menu
{
    function start_lvl(&$output, $depth = 0, $args = array())
    {
        $indent = str_repeat("\t", $depth);
        $output .= "\n$indent<div class=\"custom-sub\"><ul class=\"sub-menu\">\n";
    }
    function end_lvl(&$output, $depth = 0, $args = array())
    {
        $indent = str_repeat("\t", $depth);
        $output .= "$indent</ul></div>\n";
    }
}

我假设您的菜单是在标题中生成的,所以请转到header.php(或任何使用wp_nav_menu函数的文件)并查找以“wp_nav_menu”开头的任何内容。

由于我没有任何代码可以查看,我只能猜测它正在使用的参数(如果有的话)。如果它看起来完全像“wp_nav_menu()”,括号之间没有任何内容,那么将其更改为以下内容:

wp_nav_menu(array('walker' => new Child_Wrap()))

否则,请使用您的菜单使用的代码编辑您的问题,以便我们可以帮助您。

答案 1 :(得分:1)

function.php

class Child_Wrap extends Walker_Nav_Menu
{
   function start_lvl(&$output, $depth)
   {
       $indent = str_repeat("\t", $depth);
       $output .= "\n$indent<div class=\"sub-menu-wrapper\"><ul class=\"sub-menu\">\n";
   }
   function end_lvl(&$output, $depth)
   {
       $indent = str_repeat("\t", $depth);
       $output .= "$indent</ul></div>\n";
   }
} 

调用你的wp_nav_menu所在的函数。(例如:header.php)

$defaults = array( 'container' => 'ul', 'menu_class' => 'scroll', 'menu_id' => 'main-menu-nav' , 'walker' => new Child_Wrap() );

 wp_nav_menu( $defaults );

如果你想使用jquery这样做,你可以这样做。但最好的方法是第一种方法。在这里有时显示为加载页面时搞乱了菜单。

jQuery('ul.sub-menu').wrap('<div class="sub-menu-wrapper" />');