向菜单动态添加项目

时间:2013-01-22 作者:user26329

我正在做一个动态和静态内容的WP网站。我会从管理面板创建菜单。我有5个部分(主页、关于、船、新闻(博客)、联系人)。我会为船只创建一个带有新分类法的自定义帖子类型。我现在想做的是,自动将每个新船模型显示为船的子菜单。我该怎么做?

2 个回复
SO网友:Milo

您可以通过custom walker function, 在您的菜单上。一个非常简单的例子:

class Walker_WPA82563_Submenu extends Walker_Nav_Menu {
    function end_el(&$output, $item, $depth=0, $args=array()) {
        if( \'Boats\' == $item->title ){
            $output .= \'<ul><li>Dynamic Subnav</li></ul>\';
        }
        $output .= "</li>\\n";  
    }
}
然后在调用nav菜单的地方,使用walker 论点

wp_nav_menu(
    array(
        \'theme_location\' => \'primary\',
        \'walker\' => new Walker_WPA82563_Submenu
    )
);

SO网友:Slavic

我相信有一个更好的解决方案,适用于菜单真正动态的情况(例如,它们应该根据用户角色而改变,或者如果菜单项的组合太多,需要在运行时确定)。

Wordpress\'wp_nav_menu_objects 挂钩最方便:

add_filter(\'wp_nav_menu_objects\', \'addMenuItems\', null, 2);
function addMenuItems($sortedItems, $args)
{
    $toAdd = [
        (object) [
            \'ID\'        => 1,               // make sure this doesn\'t conflict with existing items
            \'db_id\'     => 1,               // same here
            \'title\'     => \'To Google!\',
            \'url\'       => \'https://www.google.com\',
        ],
    ];

    return array_merge($sortedItems, $toAdd);
}

结束

相关推荐

WooCommerce dynamic menus

我有一个基本的WordPress网站,设置了Suffusion主题和WooCommerce插件。这在大多数情况下都很有效,但是当我让人们点击/悬停在“Shop”菜单图标上时,我希望它能够动态地下拉我定义的产品类别。我如何做到这一点?我肯定有关于这个主题的文档,但我不确定要查找什么。我主要是一名系统管理员。