我正在为自定义菜单布局创建一个WordPress插件。我很清楚,我可以直接在主题中轻松实现此菜单,并且我已经非常详细地阅读了wp_nav_menu()
的功能和限制,而且我已经尝试并测试了已经创建的每个已更新的插件默认的WordPress菜单。
我希望使用插件,因为我的客户端将在几个不同的WordPress网站上实现这一点,其中许多网站运行在不同的主题上 - 其中大多数是我没有创建的主题,我不想重写他们的代码,以防他们将来更新主题。
当我研究一种将菜单实现到主题中的方法时,我发现只有两种好方法,因为在菜单显示时没有调用钩子或过滤器。第一个是更改主题以查找插件(这类似于PixoPoint和许多其他菜单插件使用的方法):
header.php:
if(function_exists('pixopoint_menu')){
pixopoint_menu();
} else {
wp_nav_menu();
}
第二种方法是步行者类:
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()
函数,因为这将为我的插件提供对大多数主题的支持,而无需编辑任何主题文件。有没有办法做到这一点?或者有没有更好的方法来编写我看不到的菜单插件?
答案 0 :(得分:2)
您可以使用wp_nav_menu_args
过滤器修改传递给wp_nav_menu
的参数,以便指定自定义助行器类。
add_filter('wp_nav_menu_args', 'my_wp_nav_menu_args_filter');
function my_wp_nav_menu_args_filter($args = array()) {
$args['walker'] = new my_walker_class();
return $args;
}