问题描述

我想在以下过滤器中修改 $ 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。