我正在尝试将静态菜单项添加到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>
还有什么我能做到的吗???
谢谢你的建议。。。
最合适的回答,由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菜单放在任何需要的地方,并围绕它进行编码。