对于其他感兴趣的人,我一直在使用emagdnim来获得简单的解决方案。
找到的最好的一个是在header.php文件中使用输出缓冲。通过这种方式,我们可以使用wp_nav_menu()来渲染多个菜单,但是使用输出缓冲,我们可以将它分解成几部分,然后移动这些部分。
这里是显著代码用于底部menu.php(即更新部分):
........
<?php /* Our navigation menu. */ ?>
<?php
if(wp_emember_is_member_logged_in()){
wp_nav_menu(array('menu' => 'normal-menu', 'menu_class' => 'sf-menu'));
/** CUSTOM CODE ADDITION **/
//connect to database
$link = mysql_connect("localhost", "[USERNAME]", "[PASSWORD]") or die("Oops! Please wait a few seconds and try again");
//connect to table
mysql_select_db("[TABLE NAME]") or die(mysql_error());
//search table
$result = mysql_query("SELECT * FROM `wp_wp_eMember_membership_tbl` ORDER BY `alias` ASC");
$array = array();
//while there are still rows in the table we haven't been to...
while ($row = mysql_fetch_array($result)){
//clean up the "alias" so it becomes the name of the menu
$alias = strtolower(str_replace(' ','-',$row['alias']));
//now this can be accessed as "$array[X]" to get the name of the menu.
if ($alias == 'admin'){
$alias = 'admin-menu';
}
$array[$row['id']] = $alias;
}
//done is a way to check if anything is found, if not a default menu is loaded
echo '{BREAK}';
$done = 0;
$ids = array_keys($array);
$info2 = wp_eMember_get_user_details("more_membership_levels");
if (strstr($info2,',')){
$moreMemberLevels = explode(',',$info2);
}elseif ($info2 != ''){
$moreMemberLevels[0] = $info2;
}
//go through each ID/menu possibility
for ($i = 0; $i < count($ids); $i++){
if ((wp_emember_is_member_logged_in($ids[$i])) || ((is_array($moreMemberLevels)) && ((in_array($ids[$i],$moreMemberLevels))))){
$done++;
//add the mneu to wp
/** UNCOMMENT THIS TO IMPLEMENT LOOKUP VERIFICATION BEFORE ADDING A MENU **/
/*
echo 'Searching for '.$array[$ids[$i]].'...';
$res = mysql_query("SELECT * FROM `wp_posts` WHERE `post_type`='nav_menu_item' AND `post_name`='{$array[$ids[$i]]}' LIMIT 1");
if (mysql_num_rows($res) == 1){*/
if ($array[$ids[$i]] != 'free'){
/** UNCOMMENT THIS TO DEBUG **/
//echo 'Adding '.$array[$ids[$i]].' to menu...<br />';
wp_nav_menu(array('menu'=>$array[$ids[$i]], 'menu_class'=>'sf-menu'));
}
}
}
echo ' {BREAK}';
/** END CUSTOM CODE ADDITION **/
}else{
wp_nav_menu(array('menu' => 'normal-visitor-menu', 'menu_class' => 'sf-menu'));
}
和的header.php更新的代码(它加载底menu.php)
....
<div id="page" class="hfeed">
<?php /* ======== BOTTOM MENU ======== */
ob_start();
get_template_part('bottom','menu');
$bm = ob_get_clean();
$bm_array = explode('{BREAK}',$bm);
$bm_Top = $bm_array[0];
$bm_Move = strip_tags($bm_array[1],'<li><br /><br><font><b><i><u><em><strong><a>');
$bm_End = $bm_array[2];
$bottomMenu = str_replace('My Menu Item</a></li>', 'My New Menu Item</a>
<ul class="sub-menu">'.$bm_Move.'</ul>
</li>',$bm_Top).$bm_End;
ob_end_clean();
echo $bottomMenu;
//echo '*****'.$bm_Move.'*****';
?>
<div id="main">
附加信息/技术摘要
此方法采用两个常规菜单之一,并根据每个成员资格样式应加载的内容向其中添加元素。 “元素”是由wp_nav_manu()创建的完整菜单,但只有一个项目。菜单的名称也是会员级别的名称,但带有连字符而不是空格,并且都是小写字母。通过这样做,我们不需要将表面上任意的成员级别ID与菜单名称链接起来的另一个表格 - 只需根据此系统命名菜单/成员资格,以便知道要查找的内容。此外,每个添加的“菜单”实际上是仅具有一个单一菜单项的菜单,其中<ul></ul>
标签被去除,以便将它们嵌套到期望父元素下面的子菜单<ul>
中。
说完之后,我们能够使用wp菜单系统根据其成员级别和其他成员级别动态显示子菜单项的无限可能性。
将订阅选项卡是最后一个标签或者是它...你能在你的问题后所产生的菜单(HTML)的代码的菜单的中间.. –
订阅选项卡将位于菜单的中间。我不确定菜单的HTML代码是什么意思?这是PHP ...如果我错了,请纠正我。谢谢! – emagdnim
我的意思是php的输出...表示在页面加载后使用“查看源代码”菜单的html代码。这样我可以建立一个基于用户检查应该做这项工作的JavaScript str_replace脚本。 –