Walker类和基本php之间的区别

时间:2016-09-27 作者:Emad Aldeen

几天前,我开始在Walker班学习,我仍然有一个简单的问题:

构建子菜单和下拉菜单时,what is the difference between using Walker class to build it, or simply using php 带有html标记和if语句的foreach循环?

作为一个初学者,我仍然认为Walker课程很复杂,原因很难令人信服。

P、 学生:如果你的回答是“步行者更有活力”,请举例说明。

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

如果您只是为自己的网站构建一个主题,那么您可以通过一些PHP循环轻松实现更难理解的主题:walker class 实现。毕竟,这个类只是穿过一个树状结构,什么也不做。如果您确切地知道您想要的树是什么样子的,那么可以直接使用PHP进行处理。

当你构建一些更通用的东西时,事情就不同了,比如一个可能有子主题的主题。然后,您需要用户的灵活性。例如,以walker_nav_menu 类,该类本身已经是walker类的扩展。默认情况下生成的html并没有那么大的优势。区别在于它包含的过滤器,例如nav_menu_css_class, 允许用户更改附加到菜单的类<li> 在孩子的functions.php. 例如:

add_filter(\'nav_menu_css_class\' , \'wpse240664_nav_class\' , 10 , 2);
function wpse240664_nav_class($classes, $item){
     if(is_single() && $item->title == \'About Us\'){
             $classes[] = \'highlight-this\';
     }
     return $classes;
}
使用此功能,子主题将在单个页面上的“关于我们”菜单项中添加“突出显示此”类。另一种方法是编辑菜单模板文件(可能是header.php). 只需修改一个菜单项,就必须复制整个菜单项header.php 在您的孩子主题中。当父主题header.php 更新后,您必须检查您的子副本以进行必要的更改。如果使用walker类,您可以避免所有这些。可能更难实现,但它为代码的其他用户节省了时间。

相关推荐

WordPress中声明SplitMenuWalker::Walk($Elements,$max_Depth)时出现警告

我开始在WordPress网站上收到以下错误:警告:SplitMenuWalker::walk($elements,$max\\u depth)的声明应与/home/relati67/public\\u html/wp content/themes/mentis/inc/mega menu/split menu中的walk::walk($elements,$max\\u depth,$args)兼容。php第0行我不知道在这里该怎么办。我发现了一个具有类似内容的线程,但错误指向特定行(不是第0行),并且不