用插件取代WordPress核心功能

时间:2011-07-28 17:09:30

标签: wordpress-plugin wordpress

我正在为自定义菜单布局创建一个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()函数,因为这将为我的插件提供对大多数主题的支持,而无需编辑任何主题文件。有没有办法做到这一点?或者有没有更好的方法来编写我看不到的菜单插件?

1 个答案:

答案 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;
}