用插件替换WordPress菜单功能

时间:2011-07-28 作者:stevendesu

我之前在StackOverflow上问过这个问题。在意识到有专门针对WordPress的StackExchange之前。以下是旧问题的链接(供版主删除):

https://stackoverflow.com/questions/6862887/replacing-wordpress-core-functionality-with-a-plugin

我正在为自定义菜单布局创建WordPress插件。我很清楚,我可以很容易地将此菜单直接实现到主题中,并且我已经非常彻底地阅读了wp_nav_menu(), 另外,我已经尝试并测试了为替换默认WordPress菜单而创建的每个插件。

我希望使用一个插件,因为我的客户端将在几个不同的WordPress网站上实现这个功能,其中许多网站运行在不同的主题上,其中大多数都是我没有创建的主题,我不希望重新编写它们的代码,以防它们将来更新主题。

当我研究如何将菜单实现到主题中时,我发现只有两种好方法,因为在菜单显示时没有调用挂钩或过滤器。第一个是更改主题以查找插件(这类似于PixoPoint和许多其他菜单插件使用的方法):

header.php:

if(function_exists(\'pixopoint_menu\')){
    pixopoint_menu();
} else {
    wp_nav_menu();
}
第二种方法是walker类:

plugin.php:

class my_walker_class Extends Walker_Nav_Menu {
    function start_el(&$output, $item, $depth, $args) {
        /*
        *  Etc. Etc.
        */
    }
}

header.php:

wp_nav_menu( Array( \'walker\' => \'my_walker_class\' ) );
但是,正如您所注意到的,这两种方法都需要修改标准标题。php文件。

理想情况下,我想简单地替换wp_nav_menu() 如果我的插件已加载,则该函数将为大多数主题提供插件支持,而无需编辑任何主题文件。有什么好办法吗?或者有没有更好的方法来编写我没有看到的菜单插件?

1 个回复
最合适的回答,由SO网友:Otto 整理而成

犯错误菜单系统上有很多过滤器。

在wp\\u nav\\u menu()函数调用的输出上调用“wp\\u nav\\u menu”过滤器。因此,如果需要修改菜单输出,可以使用它。

“wp\\u nav\\u menu\\u items”过滤器在生成的项目数组(基本上是所有LI项目)上调用。

如果需要修改传递到wp\\u nav\\u menu的参数,例如动态添加您自己的walker,可以使用“wp\\u nav\\u menu\\u args”过滤器。

有更多更具体的过滤器,可能可以用来以更微妙的方式改变事情。这些都是一些主要的俱乐部式过滤器,可以改变整个事情。

结束

相关推荐

Menu API not switching menus?

我正在使用菜单API,我想切换到其他菜单,但出于某种原因,它保留了第一个菜单这是我的密码在函数中。php add_action( \'init\', \'register_my_menus\',10 ); function register_my_menus() { register_nav_menu(\'main-navigation\', \'Main Navigation\'); } 下面是我的主题文件(header.ph