问题描述
我想在以下过滤器中修改 $ path 。它有 1 个输入和 2 个参数。
function documents_template( $template = '' ) {
$path = DOCUMENTS_INCLUDES_DIR . '/document/' . $template;
return apply_filters( 'document_template', $path, $template );
}
这是我添加过滤器的功能,它会收到错误消息,如何获得正确的?
function my_template( $template = '' ){
$path = MY_INCLUDES_DIR . '/document/'. $template;
return $path;
}
add_filter( 'document_template','my_template', 10, 2 );
我试图改变我的返回值如下,它也不工作:
return apply_filters( 'my_template', $path, $template);
有了下面的答案,我的新过滤器仍然不能正常工作,那也许是因为我的过滤器是在一个类中?这里是全新的代码:
Class My_Class{
function __construct() {
add_filter( 'document_template', array( $this, 'my_template',10, 2 ) );
}
function my_template( $path, $template ){
$path = MY_INCLUDES_DIR . '/document/'. $template;
return $path;
}
}
最佳解决办法
function my_locate_template( $path, $template ){
$path = MY_INCLUDES_DIR . '/document/'. $template;
return $path;
}
add_filter( 'documents_template','my_locate_template', 10, 2 );
add_filter 需要 4 个变量。第一和第二是必需的。 1. 名称的过滤器,2. 名称的功能。第三个是优先级 (功能什么时候被触发) 。第四是参数的数量。如果你定义参数的数量,你也必须把它们放在你的函数中。例如,
add_filter( 'the_filter','your_function', 10, 1 );
function your_function($var1) {
// Do something
}
如果过滤器支持更多的参数 (在这种情况下为 3)
add_filter( 'the_filter','your_function', 10, 3 );
function your_function($var1, $var2, $var3) {
// Do somthing
}
阅读有关 add_filter()信息的所有代码
function documents_template( $template = '' ) {
$path = DOCUMENTS_INCLUDES_DIR . '/document/' . $template;
return apply_filters( 'document_template', $path, $template );
}
function my_template( $path, $template ){
$path = MY_INCLUDES_DIR . '/document/'. $template;
return $path;
}
add_filter( 'document_template','my_template', 10, 2 );
此代码适用于我。你尝试过吗
在你班上的改变:
add_filter( 'document_template', array( $this, 'my_template',10, 2 ) );
至:
add_filter( 'document_template', array( $this, 'my_template'), 10, 2 );
次佳解决办法
这些需要匹配,但不要:
apply_filters( 'document_template', $path, $template );
和
add_filter( 'documents_template','my_template', 10, 2 );
document_template
!= documents_template
否则,一切看起来都正确。
Edit
等等,不是一切都看起来正确。我不认为你想添加一个参数到你的回调函数定义。相反,您需要在回调中定义 $template
,或者简单地将其传递回未修改。所以,替换这个:
function my_template( $template = '' ){
… 有了这个:
function my_template(){
例如。:
function my_template(){
$path = MY_INCLUDES_DIR . '/document/'. $template;
return $path;
}
add_filter( 'documents_template','my_template', 10, 2 );
编辑 2
好的,我的小错误。尝试这样做回调:
function my_template( $path, $template ){
$path = MY_INCLUDES_DIR . '/document/'. $template;
return $path;
}
add_filter( 'documents_template','my_template', 10, 2 );
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。