如果从未应用过筛选器,如何运行它们?

时间:2015-02-10 作者:terraling

我正试图找出polylang过滤器中按语言切换菜单的错误原因。

我正在查看nav\\u menu\\u locations功能,该功能作为过滤器添加如下:

add_filter(\'theme_mod_nav_menu_locations\', array($this, \'nav_menu_locations\'), 20);
随后定义为:

public function nav_menu_locations($menus) {
    ...
    return $menus;
}
我在开始时和返回更改后的值之前插入了echo$菜单的语句,并可以确认函数正在被调用。

但奇怪的是,搜索整个插件代码,然后搜索整个WordPress核心,我找不到匹配的apply\\u过滤器用于theme\\u mod\\u nav\\u menu\\u位置,而且据我所知,也没有直接调用该函数。所以我看不到$menus参数是在哪里生成的。

我想我了解了过滤器挂钩的工作原理,但看不到nav\\u menu\\u locations函数是如何运行的,尽管它很清楚。

这可能无法帮助我解决菜单切换问题,但我至少想澄清一下过滤器是如何触发的。

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

WordPress会自动为每个theme_mod 使用此格式theme_mod_{name}. 过滤器被调用get_theme_mod(). 就你而言,nav_menu_locationstheme_mod 此过滤器由WordPress创建:

//$value of the mod is passed to filter callbacks
apply_filters(\'theme_mod_nav_menu_locations\', $value);
供参考:

SO网友:Mark Kaplun

一些过滤器和操作是常量部分和变量部分的混合体,例如(不是真正的挂钩){$post\\u type}\\u save\\u post可以在代码中使用,并根据代码流触发post\\u save\\u post和page\\u save\\u post的操作/过滤器。因此,如何在代码中找到触发动作的位置并不总是显而易见的,可能需要一些猜测。

特别是对于theme\\u mod,因为@cybmeta已经在他的回答中解释过了,所以这里没有必要重复。

结束

相关推荐

Search with filters and title

我想搜索custom_post 按标题和ACF字段。所以,我用了WP_Query WordPress函数,但我不能按标题过滤,只能按过滤器过滤。当我提交表单时,我有这样的URL:http://example.com/?s=titre&filter1=condition1&filter2=condition2&filter3=condition3 我的代码:$title = $_GET[\'s\']; $args = array( \'pagenam