所以,我一直在尝试编写一个插件,我需要使用\'nav_menu_link_attributes\'
滤器我尝试添加过滤器,但根本没有响应。也就是说,我让它在调用过滤器的过程中死去。
... # in class definition public function __construct() { add_filter(\'wp_nav_menu_objects\',array($this,\'filter_menuitem\')); } public function filter_menuitem($attrs) { die(\'SUCCESS!!!\'); } ...我查看了来源
nav-menu-template.php
查看为什么以及何时调用什么过滤器。因此,我尝试使用以下过滤器,一次一个,按照它们在源代码中出现的顺序;有些成功了,有些根本没有反应:function wp_nav_menu() { wp_nav_menu_args Responded pre_wp_nav_menu Responded wp_nav_menu_container_allowedtags Did not respond - not a surprise wp_nav_menu_objects Did not respond - should definitely have responded wp_nav_menu_items Did not respond - should definitely have responded wp_nav_menu Did not respond - should definitely have responded }唯一有意义的是
\'pre_wp_nav_menu\'
可用于生成自定义菜单,跳过调用以下过滤器的WP default方法。但我试着使用了3个不同的主题,我不希望经常出现这种情况,甚至永远不会出现这种情况。我错过什么了吗?这是WordPress的bug吗?自定义菜单生成真的那么常见吗?
Details:
WordPress 4.4.2测试主题:优雅主题Divi 2.4.6.1、213、215插件:只有我自己的,没有一个使用\'pre_wp_nav_menu\'
滤器
ANSWER:
所以,在彼得·古森的回答中,我查找了wp_nav_menu
函数,并找到\'wp_page_menu\'
在组成完整HTML代码(无换行符;包括包装器)后调用的过滤器。对于我正在做的内容来说,这已经足够了,在挂钩和测试之后,我发现它是有效的!
我还发现\'wp_list_pages\'
过滤器也可以工作。它只列出了<li>
用换行符分隔的标记。不包括包装,甚至<ul>
标签然而,我对使用此功能的其他功能持怀疑态度。不能仅为菜单调用它。因此,为了安全起见,最好还是坚持\'wp_page_menu\'
滤器