编辑:我调整了参数,将徽标直接插入菜单,而不是填充特定的菜单项。填充方法可以轻松地驱动偏心的居中菜单。此插入方法应解决该问题。
我正在处理一个主题,并希望创建一个按徽标分割的菜单。我意识到我可以创建两个菜单,但我希望尽可能简化用户。我已经能够获得项目数量并定位我想要的菜单项,但我不确定如何使用我的functions.php文件添加类&#34; pad-item&# 34;到<li>
。
以下是我必须找到并定位指定项目的内容。但是,所有它返回的都是顶级项目的索引号。
$locations = get_nav_menu_locations();
$menu = wp_get_nav_menu_object($locations['primary']);
$items = wp_get_nav_menu_items($menu->term_id);
$top_level = 0;
foreach ($items as $val) {
if ($val->menu_item_parent === '0') {
$top_level++;
}
}
$index = round($top_level / 2) - 1;
return $index;
非常感谢任何帮助。感谢。
答案 0 :(得分:1)
我能够找出问题,我希望发布我的解决方案以防其他人正在寻找相同的答案。
function main( $items, $args ) {
// Checks to see if the menu passed in is the primary one, and creates the logo item for it
if ( $args->theme_location == 'primary' ) {
$logo_item = '<li class="menu-item">' . get_logo() . '</li>';
}
//Gets the location of the menu element I want to insert the logo before
$index = round( count_top_lvl_items() / 2 ) + 1;
//Gets the menu item I want to insert the logo before
$menu_item = get_menu_item( $index );
$insert_before = '<li id="menu-item-' . $menu_item->ID;
$menu_update = substr_replace( $items, $logo_item, strpos( $items, $insert_before ), 0 );
return $new_menu;
}
//Counts the number of top level items in the menu
function count_top_lvl_items() {
$items = get_menu_items();
$counter = 0;
foreach ( $items as $val ) {
if ( $val->menu_item_parent === '0' ) {
$counter++;
{
return $counter;
}
//Returns the menu item to insert the logo before
function get_menu_item( $index ) {
$items = get_menu_items();
$counter = 0;
foreach ( $items as $val ) {
if ( $val->menu_item_parent === '0' ) {
$counter++;
}
if ( $counter == $index ) {
return $val;
}
}
}
//Returns the logo menu item. I have it separated because my theme allows for varied logos
function get_logo() {
$home = get_option( 'home' );
$logo = get_option( 'logo' );
$logo_item = <<<EOD
<div id="logo">
<a href="$home">
<img src="$logo" id="logo-img" alt=""/>
</a>
</div>
EOD;
return $logo_item;
}
function get_menu_items() {
$locations = get_nav_menu_locations();
$menu = wp_get_nav_menu_object( $locations['primary'] );
$items = wp_get_nav_menu_items( $menu );
return $items;
}
如果我错过了某些内容,请随时告诉我,或者是否可以通过其他方式完成。
谢谢!
答案 1 :(得分:0)
您的函数名称可能被其他插件或主题使用,可能会导致问题。
我建议您更改函数名称或使用if else语句中的function_exists。
这是手册&gt; http://php.net/manual/bg/function.function-exists.php
快速建议: `
if(!function_exists('main'){
function main(){
$do_stuff = 'Currently doing';
return $do_stuff;
}
}
`
答案 2 :(得分:0)
我正在使用主题页面构建器框架,然后在自定义外观时可以选择一个中心菜单,其中徽标位于中间,并且菜单是分开的。