带有awsAccordion的自定义导航菜单

时间:2014-06-08 作者:hambos22

我正在为我的客户制作一个自定义模板。我绞尽脑汁了好几个小时,为了让竖直的手风琴菜单变得动态,这样我的客户就可以更改导航链接等。导航的结构是这样的

<div id="navigation">
<ul>
    <li>
        <h4><a href="link">Menu title</a>
        </h4>
    </li>
    <li>
        <h4><a href="Link">Menu Title</a></h4>
    </li>
    <li>
        <h4>Menu Title with submenu</h4>
        <div>
            <span><a href="link">Submenu Title</a></span>
            <span><a href="link">Submenu title</a></span>
        </div>
    </li>
</ul>

这是我在wordpress中的第一个模板,我阅读了我尝试使用中的代码进行实验的文档wordpress codex 但我无法实现它。我尝试了这个代码,并用它做了很多实验,但都没有成功。我希望它在我给您的第一个代码示例上以相同的方式呈现。

 wp_nav_menu(array(      
\'container\'       => \'ul\',      
\'container_id\'    => \'\',      
\'menu_class\'      => \'menu\',      
\'menu_id\'         => \'\',  
\'before\'          => \'\',  
\'after\'           => \'\',  
\'link_before\'     => \'\',  
\'link_after\'      => \'\',  
\'items_wrap\'      => \'<li>%3$s</li>\', ));
你能帮我一点忙吗?谢谢:)

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

在阅读了PHP和wordpress codex之后,我通过创建一个walker类实现了我想要的。这是代码

class Hambos_Walker_Nav_Menu extends Walker_Nav_Menu {

    function start_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\\t", $depth);

        if ($depth == 0):
            $output .= "\\n$indent <div>\\n";
        else:
            $output .= "\\n$indent <ul>\\n";
        endif;        

    }

    function end_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\\t", $depth);

        if ($depth == 0):
            $output .= "$indent</div>\\n";
        else:
            $output .= "$indent</ul>\\n";
        endif;  

    }

    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
        $indent = ( $depth ) ? str_repeat( "\\t", $depth ) : \'\';

        $class_names = \'\';

        $classes = empty( $item->classes ) ? array() : (array) $item->classes;
        $classes[] = \'menu-item-\' . $item->ID;

        $class_names = join( \' \', apply_filters( \'nav_menu_css_class\', array_filter( $classes ), $item, $args ) );
        $class_names = $class_names ? \' class="\' . esc_attr( $class_names ) . \'"\' : \'\';

        $id = apply_filters( \'nav_menu_item_id\', \'menu-item-\'. $item->ID, $item, $args );
        $id = $id ? \' id="\' . esc_attr( $id ) . \'"\' : \'\';

        if ($depth == 0):
            $output .= $indent . \'<li\' . $id . $class_names .\'><h4>\';
        else:
            $output .= $indent . \'<span\' . $id . $class_names .\'>\';
        endif;

        $atts = array();
        $atts[\'title\']  = ! empty( $item->attr_title ) ? $item->attr_title : \'\';
        $atts[\'target\'] = ! empty( $item->target )     ? $item->target     : \'\';
        $atts[\'rel\']    = ! empty( $item->xfn )        ? $item->xfn        : \'\';
        $atts[\'href\']   = ! empty( $item->url )        ? $item->url        : \'\';

        $atts = apply_filters( \'nav_menu_link_attributes\', $atts, $item, $args );

        $attributes = \'\';
        foreach ( $atts as $attr => $value ) {
            if ( ! empty( $value ) ) {
                $value = ( \'href\' === $attr ) ? esc_url( $value ) : esc_attr( $value );
                $attributes .= \' \' . $attr . \'="\' . $value . \'"\';
            }
        }

        $item_output = $args->before;
        $item_output .= \'<a\'. $attributes .\'>\';
        $item_output .= $args->link_before . apply_filters( \'the_title\', $item->title, $item->ID ) . $args->link_after;
        $item_output .= \'</a>\';
        $item_output .= $args->after;

        $output .= apply_filters( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args );

    }

    function end_el( &$output, $item, $depth = 0, $args = array() ) {
        if ($depth == 0):
            $output .= "<h4></li>\\n";
        else:
            $output .= "</span>\\n";
        endif;
    }

}

结束

相关推荐

显示评论者用户名或登录名的PHP函数

我想在注释模板中显示注释者的用户名或登录名。我知道有一个函数comment_author_link(), 但这会显示“公开显示名称为”的名称,而不一定是用户名。用户名必须是唯一的,所以我更愿意显示用户名。我尝试了其他一些功能,并一直在寻找这个。我得到的最接近的函数是以下函数:<?php if ($comment->user_id) { $user=get_userdata($comment->user_id); echo $user->use