在wp_NAV_MENU前插入div

时间:2012-07-16 作者:shawn

如何在wp\\u nav\\u menu()添加ul之前插入自定义div?

问题是脚本将我的“div menu button”插入导航ul之后,而不是之前。

我试图通过一个函数来实现这一点,因为基本的想法是,在我的一些菜单上,我需要插入一个带有“菜单”按钮的div,以便用户单击以触发下拉菜单。

*我不得不修改下面的代码,因为编辑器不断从显示中删除我的div代码。只要说我使用了正确的开合div就足够了

这里有一个指向“正确”代码的链接,因为我无法在堆栈上找到编辑器。https://gist.github.com/3120416


function tumble_menu( $args = array() ) {
    /* Default arguments */
    $defaults = array(
        \'container\'         => \'ul\',
        \'menu_class\'        => \'nav\',
        \'menu_id\'           => \'top_nav\',
        \'theme_location\'    => \'top-menu\',
        \'echo\'              => true,
        \'before\'            => \'\',
        \'after\'             => \'\',
        \'link_before\'       => \'\',
        \'link_after\'        => \'\',
        \'depth\'             => 1,
        \'sort_column\'       => \'menu_order\',
        \'walker\'            => \'\'
        );
    $defaults   = apply_filters( \'tumble_nav_default_args\', $defaults);
    $args       = wp_parse_args( $args, $defaults );

$main_menu = wp_nav_menu( $args );
}函数tumble\\u add\\u menu\\u wrapper($html,$begin,$end){//用新标记$html=$begin。$html。$end;return$html;}add\\u过滤器(“tumble\\u menu\\u wrap”,“tumble\\u add\\u menu\\u wrapper”,10,3);函数tumble\\u do\\u menu\\u wrapper(){$html=tumble\\u menu();echo apply\\u过滤器(\'tumble\\u menu\\u wrapp\',$html,\'div class=“menu button”>menu/div>\',“”);}

Update我的问题有点困惑。我并没有试图将导航封装在div元素中,而是试图在输出导航ul元素之前插入一个自包含的div。

不知何故,wp\\u nav\\u menu()函数不允许这样做。如果我改用“标准”html元素,那么我的包装器函数工作得很好。我希望有一天能了解为什么这个简单的php逻辑可以工作,但不能使用wp\\u nav\\u menu(),但我想这是另一天的问题。

感谢Chip提供的信息!

2 个回复
最合适的回答,由SO网友:shawn 整理而成

以下是解决方案。SergeyBiryukov的道具

更改需要将echo设置为false并在return$main\\u菜单中添加。

function tumble_menu( $args = array() ) {
    /* Default arguments */
    $defaults = array(
        \'container\'         => \'ul\',
        \'menu_class\'        => \'nav\',
        \'menu_id\'       => \'main_menu\',
        \'theme_location\'    => \'main-menu\',
        \'echo\'          => false,
        \'before\'        => \'\',
        \'after\'         => \'\',
        \'link_before\'       => \'\',
        \'link_after\'        => \'\',
        \'depth\'         => 1,
        \'sort_column\'       => \'menu_order\',
        \'show_container\'    => false,
        \'walker\'        => \'\',
        );
    $defaults   = apply_filters( \'tumble_nav_default_args\', $defaults);
    $args       = wp_parse_args( $args, $defaults );
    $main_menu = wp_nav_menu( $args );
    return $main_menu;
}
function tumble_add_menu_wrapper($nav_menu, $begin, $end) {
    // wrap our original HTML with the new tags
    return $begin . $nav_menu . $end;
}

add_filter( \'tumble_menu_wrap\', \'tumble_add_menu_wrapper\', 10, 3 );

function tumble_do_menu_wrapper() {
    $html = tumble_menu();
    echo apply_filters( \'tumble_menu_wrap\', $html, \'div class="menu-button">Menu/div>\',\'\' );
}

SO网友:Chip Bennett

如何在wp\\u nav\\u menu()添加ul之前插入自定义div?

这就是\'container\' 数组键定义:包含菜单的元素。

菜单将始终输出为<ul>, 包装在\'container\' 数组键:a或<div> (默认),通过传递\'div\'; <nav>, 通过路过\'nav\'; 或者没有,顺便说一下false.

所以,如果你想把导航菜单包装成<div class="menu-button">, 使用以下数组参数:

array(
    \'container\' => \'div\',
    \'container_class\' => \'menu-button\'
)
(尽管如此,\'div\' 是默认值,因此如果需要,可以忽略它。)

结束

相关推荐

Run shortcode before filters

我的用户在注释中发布代码片段。我为此创建了一个快捷码:function post_codigo($atts,$content=\"\"){ return \'<code>\'.$content.\'</code>\'; } add_shortcode(\'codigo\',\'post_codigo\'); 问题是html在打包到代码标记之前会被过滤掉。我想如果我能在过滤器之前运行短代码,那么我可以使用fun