Automatically generated menu

时间:2012-04-11 作者:porton

我有菜单:

Activities
Projects
About Us
News
(不计算子菜单项)。

现在“活动”没有子菜单。

我创建了自定义内容类型“project”。

我的老板想在“活动”菜单中自动填写所有项目的列表。

是否可以在不重新编写所有WP菜单输出代码的情况下完成?

2 个回复
SO网友:Tom J Nowell

对是的,它可以,您需要挂到助行器使用的过滤器上,例如:

add_filter( \'walker_nav_menu_start_el\', \'menu_show_project_post\', 10, 4 );

function menu_show_project_post( $item_output = \'\', $item = \'\', $depth = \'\', $args = \'\' ) {
    global $post;

    if ( is_array( $item->classes ) ) {
        $query = false;
        foreach( $item->classes as $class ) {
            if ( $class == \'project_posts\') {
                $query = true;
                break;
            }
        }

        if ( $query ) {
            $the_posts = get_posts( array(
                \'post_type\' =>  \'project\',
                \'numberposts\' => 5
            ) );

            if ( ! empty( $the_posts ) ) {
                $new_html[] = \'<ul class="sub-menu">\';

                foreach( ( array ) $the_posts as $post ) {
                    setup_postdata( $post );
                    $new_html[] = \'<li class="menu-item">\';
                    $new_html[] = \'<a href="\' . get_permalink( ) . \'" class="depth-\' . ( $depth ? $depth + 1 : 2 ) . \'">\';
                    $new_html[] = the_title(\'\',\'\',false );
                    $new_html[] = \'</a>\';
                    $new_html[] = \'</li>\';
                }
                wp_reset_postdata();

                $new_html[] = \'</ul>\';

                $item_output .= implode( "\\n", $new_html );
            }
        }
    }
    return $item_output;
}
在函数中使用此代码。php中,任何包含“project\\u posts”类的菜单项都会给出一个子菜单,其中包含5个project类型的posts。

根据需要修改代码,以显示任意数量的帖子或帖子类型

SO网友:maryisdead

我想您可以编写一个自定义菜单漫游器来绕过它,它可以拦截您的活动页面,并插入项目类型的帖子。

看见http://codex.wordpress.org/Function_Reference/wp_nav_menu, walker选项。

对于您的定制助行器,您可以轻松扩展Walker_Nav_Menu, 位于wp includes/nav菜单模板中。php。方法start_el 应该适合您的需要。

我会这样做的。

结束

相关推荐

Menu API not switching menus?

我正在使用菜单API,我想切换到其他菜单,但出于某种原因,它保留了第一个菜单这是我的密码在函数中。php add_action( \'init\', \'register_my_menus\',10 ); function register_my_menus() { register_nav_menu(\'main-navigation\', \'Main Navigation\'); } 下面是我的主题文件(header.ph