我可以过滤由主题或插件创建的函数吗?

时间:2017-01-23 作者:Lucas Bustamante

我使用了一个非常现代且功能齐全的主题,它有很多自定义功能。像Avada、Enfold等。

有一个函数叫做medigroup_mikado_custom_breadcrumbs 正在呼叫wp-content/themes/mytheme/framework/modules/title/title-functions.php 我试图用以下代码在函数中对其进行过滤:

function custom_debug_breadcrumb($breadcrumb) {
    $breadcrumb = "test";
    return $breadcrumb;
}
add_filter(\'medigroup_mikado_custom_breadcrumbs\', \'custom_debug_breadcrumb\', 10);
然而,无论我在该函数上添加了什么,它似乎都不会运行。

我的问题是,我可以过滤一个主题调用的函数吗?仅出于知识目的,如果它是一个插件呢?我只能用滤芯吗?

2 个回复
SO网友:Tunji

Filters 是两种挂钩之一。

它们为函数提供了修改其他函数数据的方法。

在函数定义期间,您可以过滤任何已对其变量应用过滤器的函数。

例如,在get_bloginfo 函数,您将看到在返回输出之前,在其输出上应用了一个过滤器:

$output = apply_filters( \'bloginfo\', $output, $show );
上述apply\\u filters调用意味着您可以通过定义以下筛选器来修改输出:

function wpse253559_define_filter( $output, $show ) {

    return \'altered\';
}

add_filter( \'bloginfo\', \'wpse253559_define_filter\', 10, 2 );
这将改变get_bloginfo 始终返回"altered" 不管它的初始值是什么。您可以在上阅读更多add_filterapply_filters.

References:

SO网友:Tom J Nowell

你要做的不是过滤,而是修补。你不能通过过滤来修补monkeypatch。过滤器是一种钩子类型,一个带有名称的偶数。有些过滤器与调用它们的函数具有相同的名称,但这是一种巧合/约定

如果要修改函数通过过滤器返回的内容,该函数需要将返回的内容传递到过滤器中,以便对其进行修改。这就相当于说:“我要发货了,有人想在最后一刻做些改变吗?”。如果函数不这样做,那么如果不分叉代码库,就无法通过过滤器完成