如何添加带有2个参数的滤镜?

时间:2012-01-19 作者:Jenny

我想在以下过滤器中修改$路径。它有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;
 }
}

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

function my_locate_template( $path, $template ){

      $path = MY_INCLUDES_DIR . \'/document/\'. $template;

     return $path;
}
add_filter( \'documents_template\',\'my_locate_template\', 10, 2 );
add\\u 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  );

SO网友:Chip Bennett

这些需要匹配,但不需要:

apply_filters( \'document_template\', $path, $template );
以及

add_filter( \'documents_template\',\'my_template\', 10, 2 );
document_template != documents_template

否则,一切看起来都是正确的。

编辑等等,并非所有内容都正确。我认为您不想在回调函数定义中添加参数。相反,您需要定义$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 );

结束

相关推荐

Search options/filters

我正在尝试向侧栏搜索框添加一些复选框选项,similar to this, 用户可以选择是否搜索All Words, Some Word, 或者Entire phrase.我确实在搜索后找到了这个-Wordpress Search Phrases. “句子”选项似乎很有效,但其他选项则不太好。下面的代码是我目前正在处理的,但如果能得到一些帮助使其正常工作,我将不胜感激。非常感谢S(我不想为此使用插件)。<form action=\"<?php bloginfo(\'home\'); ?>