【发布时间】:2011-07-28 17:09:30
【问题描述】:
我正在为自定义菜单布局创建一个 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' ) );
但是您会注意到,这两种方法都需要修改标准 header.php 文件。
理想情况下,如果我的插件已加载,我想简单地替换 wp_nav_menu() 函数,因为这将使我的插件支持大多数主题,而无需编辑任何主题文件。有没有好的方法来做到这一点?或者有没有更好的方法来编写我没有看到的菜单插件?
【问题讨论】:
标签: wordpress