【问题标题】:Replacing WordPress core functionality with a plugin用插件替换 WordPress 核心功能
【发布时间】: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


    【解决方案1】:

    您可以使用wp_nav_menu_args 过滤器来修改传递给wp_nav_menu 的参数,这样您就可以指定您的自定义walker 类。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-13
      • 2015-04-12
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多