将静态项目添加到wp_NAV_MENU

时间:2015-02-13 作者:drgky

我正在尝试将静态菜单项添加到Wordpress菜单。我在函数中使用过滤器“wp\\U nav\\U menu\\U items”。php。它可以工作,但不会将其放在菜单容器标签下。

function add_nav_menu_items( $items , $args ) { ?>
    <ul>
        <li><a href="#">PRODUCTS</a>
            <ul>
                <li><a href="<?php echo esc_url(get_category_link(get_cat_ID(\'Sci-Fi\')));?>">SCI-FI</a>
                    <ul>
                        <?php query_posts( array (\'post_type\'=>\'scifi\',\'showposts\'=>-1,\'order\'=>\'ASC\') ); while ( have_posts() ) : the_post(); ?>
                            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                        <?php endwhile; wp_reset_query(); ?>
                    </ul>
                </li>
                <li><a href="<?php echo esc_url(get_category_link(get_cat_ID(\'Drama\')));?>">Drama</a>
                    <ul>
                        <?php query_posts( array (\'post_type\'=>\'drama\',\'showposts\'=>-1,\'order\'=>\'ASC\') ); while ( have_posts() ) : the_post(); ?>
                            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                        <?php endwhile; wp_reset_query(); ?>
                    </ul>
                </li>
                <li><a href="<?php echo esc_url(get_category_link(get_cat_ID(\'Horror\')));?>">HORROR</a>
                    <ul>
                        <?php query_posts( array (\'post_type\'=>\'horror\',\'showposts\'=>-1,\'order\'=> \'ASC\') ); while ( have_posts() ) : the_post(); ?>
                            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                        <?php endwhile; wp_reset_query(); ?>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
<?php return $items;}

add_filter( \'wp_nav_menu_items\', \'add_nav_menu_items\',10,2);
当我把代码放到网上时,firebug会这样显示

<div id="navigation_top">
    <div id="navmenu_top">
        <ul>  **-->> This is my static menu**
            <li>  
        </ul>
        <ul id="menu-menu-1" class="menu-container">  **-->> This is WP_nav_menu**
            <li class="type menu-item-object-page menu-item-587">
            <li class="type menu-item-object-page menu-item-122">
            <li class="type menu-item-object-page menu-item-121">
            **I want my menu appear here **  
        </ul>
    </div>
</div>
还有什么我能做到的吗???

谢谢你的建议。。。

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

首先出现产品菜单的原因是,作为筛选功能的一部分,您正在将其回显到页面。过滤器的期望是函数接收一个参数,$items 在本例中,修改它,然后返回它供核心代码使用。

为了避免重写生成产品菜单的代码,我们将使用输出缓冲区:

add_filter( \'wp_nav_menu_items\', \'add_nav_menu_items\', 10, 2 );
function add_nav_menu_items( $items, $args ) {
     ob_start(); // start the output buffer
     ?>
     <ul>
        <li><a href="#">PRODUCTS</a>
            <ul>
                <li><a href="<?php echo esc_url(get_category_link(get_cat_ID(\'Sci-Fi\')));?>">SCI-FI</a>
                    <ul>
                        <?php query_posts( array (\'post_type\'=>\'scifi\',\'showposts\'=>-1,\'order\'=>\'ASC\') ); while ( have_posts() ) : the_post(); ?>
                            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                        <?php endwhile; wp_reset_query(); ?>
                    </ul>
                </li>
                <li><a href="<?php echo esc_url(get_category_link(get_cat_ID(\'Drama\')));?>">Drama</a>
                    <ul>
                        <?php query_posts( array (\'post_type\'=>\'drama\',\'showposts\'=>-1,\'order\'=>\'ASC\') ); while ( have_posts() ) : the_post(); ?>
                            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                        <?php endwhile; wp_reset_query(); ?>
                    </ul>
                </li>
                <li><a href="<?php echo esc_url(get_category_link(get_cat_ID(\'Horror\')));?>">HORROR</a>
                    <ul>
                        <?php query_posts( array (\'post_type\'=>\'horror\',\'showposts\'=>-1,\'order\'=> \'ASC\') ); while ( have_posts() ) : the_post(); ?>
                            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                        <?php endwhile; wp_reset_query(); ?>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
    <?php
    $products = ob_get_clean(); // store all output from above
    return $items . $products; // add stored output to end of $items and return
}

SO网友:efreeman

而是对容器进行硬编码,如下所示将其删除:

$args = array(
    \'theme_location\' => \'XXX\',
    \'container\' => false
)
并围绕wp\\u nav\\u菜单对其进行硬编码,记住在需要的地方添加静态部分:

echo \'<ul>\';
echo \'<li><a href="http://...">Static Link</a></li>\';
wp_nav_menu($args);
echo \'</ul>\';
你可以使用这些信息来建立你的导航,无论你想要什么。基本上,移除容器将使它只吐出一堆包含链接的LI元素,所以将wp\\u nav\\u菜单放在任何需要的地方,并围绕它进行编码。

结束

相关推荐

注册_NAV_MENUS,然后以编程方式创建菜单

我有一个register_nav_menus 调用我的主题函数。php://register nav menu and footer nav. register_nav_menus( array( \'main-nav\' => \'Main Navigation\', \'footer-nav\' => \'Footer Navigation\' ) ); 这很好,但我想采取额外的步