如何获得主页菜单的名称?

时间:2017-10-05 作者:Mohamed Omar

我试图通过插件以编程方式将菜单项添加到基于位置的菜单中,我希望将其添加到附加到主页菜单的位置。

这是我的代码:

//Add user menu item
add_filter( \'wp_nav_menu_items\', \'add_user_link\', 10, 2);

/**
* Add a login link to the members navigation
*/
 function add_user_link( $items, $args ){
if($args->theme_location == \'menu\' )
{

        $items .= \'<li><a href="\'. site_url() .\'/user\'.\'">\'.__("User Control","user-control").\'</a></li>\';

}

return $items;
}
我想替换menu 值与主页菜单位置有关,因此是否有任何方法可以知道主页菜单分配到哪个位置。

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

您可以使用get_nav_menu_locations() 要获取正在使用的位置数组(已为其分配菜单),它显示如下:

Array
(
    [header-menu] => 4
    [extra-menu] => 6
)
the46 是菜单ID,我想你已经有了ID,所以这应该足够了,现在的问题是,如果没有菜单位置被使用,或者根本没有位置,数组将显示为空,这并不意味着没有显示菜单,因为在主题中可能有wp_nav_menu( array( \'theme_location\' => \'whatever\' ) ) 正在使用,Wordpress将:

默认情况下,当找不到指定的菜单或位置时,WordPress会显示第一个非空菜单

在这种情况下,您可以使用get_terms( \'nav_menu\' ), 它将显示如下数组:

Array
(
    [0] => WP_Term Object
        (
            [term_id] => 6
            [name] => Another Menu
            [slug] => another-menu
            [term_group] => 0
            [term_taxonomy_id] => 6
            [taxonomy] => nav_menu
            [description] => 
            [parent] => 0
            [count] => 2
            [filter] => raw
        )

    [1] => WP_Term Object
        (
            [term_id] => 4
            [name] => Main Navigation Menu
            [slug] => main-navigation-menu
            [term_group] => 0
            [term_taxonomy_id] => 4
            [taxonomy] => nav_menu
            [description] => 
            [parent] => 0
            [count] => 12
            [filter] => raw
        )

)
您可以检查哪个是non-empty 菜单检查[count] 值,或者您可以找到第一个空菜单项并添加菜单项,因为我知道这是您的目标。

以下是循环所有菜单的所有菜单项的代码:

$menus = get_terms(\'nav_menu\');

foreach ($menus as $menu) {//we loop all menus
    $menu_id = $menu->term_id;//we get the ID

    $menu_items_array = wp_get_nav_menu_items($menu_id);//we get the menu

    foreach ($menu_items_array as $menu_item) {//we loop all the menu items of the menu
        if($menu_item->post_name == "home") { //you can add more conditions here to check if its the home link


            //THIS IS THE HOME MENU ITEM

            echo "<pre>";
            print_r($menu_item);//here a list of values that you can use 
            echo "</pre>";
        }
    }
}

SO网友:Mohamed Omar

事实上,我的想法并不完全正确,但@David Lee按照这种方式发布了一个解决方案,它起到了作用,但如果帖子名称改成了另一个名称,那么这种方法就不起作用了,所以我想根据链接到主页的项目来做这项工作,这将是不变的,下面是我所做的

//Add user menu item
add_filter( \'wp_nav_menu_items\', \'add_user_link\', 10, 2);

/**
 * Add a login link to the members navigation
 */
function add_user_link( $items, $args )
{
    $locs = get_nav_menu_locations();           
    $homeitemlocs = array();
    foreach($locs as $loc => $v){
    $locmenu = wp_get_nav_menu_object( $v );
    $locitems = wp_get_nav_menu_items($locmenu->term_id);
        foreach($locitems as $locitem){
            if($locitem->url == get_bloginfo(\'url\').\'/\' ){
                $homeitemlocs[]= $loc;      
            }
        }
    }
    foreach ($homeitemlocs as $homeitemloc){

        if($args->theme_location == $homeitemloc )
        {

                $items .= \'<li><a href="\'. site_url().\'/user\'.\'">\'.__("User Control","user-control").\'</a></li>\';

        }

    }

    return $items;
}
这样,我的自定义链接将添加到任何有链接到主页的项目的菜单中

结束

相关推荐

Problem with custom menus

在菜单上,我说的是自定义菜单,我有一个带有几列的页脚,每列都有一个项目列表,每列菜单都需要从wp admin上的菜单选项进行更新,所以我创建了关于函数的部分。调用菜单并在页脚上添加每个菜单的php。php文档,类似于:<?php wp_nav_menu( array(\'menu\' => \'f-1\', \'menu_class\' => \'\', \'container\' => \'nav\' )); ?> <?php wp_nav_menu( arr