应用具有多个滤镜的滤镜

时间:2019-06-13 作者:Zimbu

我最近在学习挂钩和过滤器;我了解基本知识,并使用一个测试wordpress安装和一个有趣的插件(用于志愿者注册表),我得到了几个“添加过滤器”,可以在功能中正常工作。子主题的php。

现在,我正在尝试更改插件生成的一些标题的措辞,但我无法理解插件代码,因此我可以设置适当的“添加过滤器”。希望有人能给我一个简短的解释:

$return .= apply_filters( \'pta_sus_before_user_signups_list_headers\', \'\' );
            $return .= \'<h3 class="pta-sus user-heading">\'.apply_filters( \'pta_sus_public_output\', __(\'You have signed up for the following\', \'pta_volunteer_sus\'), \'user_signups_list_headers_h3\' ).\'</h3>\';
            $return .= \'<h4 class="pta-sus user-heading">\'.apply_filters( \'pta_sus_public_output\', __(\'Click on Clear to remove yourself from a signup.\', \'pta_volunteer_sus\'), \'user_signups_list_headers_h4\' ).\'</h4>\';
            $return .= apply_filters( \'pta_sus_before_user_signups_list_table\', \'\' );
目标是更改“单击清除…”字样去做别的事。我尝试了许多不同版本的add\\u filter(),但什么都没有发生,有时wordpress安装会停止工作,直到我从子函数中删除了有问题的代码。php。

感谢您提前提供的任何帮助。

Zimbu公司

更新时间:

我刚刚从插件作者那里随机找到一些信息,他/她大致解释了这里的情况:

“您可以扫描class-pta\\u sus\\u public.php文件中的代码,以查看那些具有过滤器挂钩‘pta\\u sus\\u public\\u output’的过滤器,并将两个变量传递给过滤器:第一个是原始文本字符串,第二个是标识符键字符串,让您知道输出的是哪个特定文本字符串(因此您只需修改要更改的文本字符串)。”

现在我必须弄清楚这意味着什么!

更新2:

从插件支持论坛上写的一些东西中找到了答案。为了向h4元素添加过滤器,即更改h4文本部分中显示的文本,我在子函数中添加了以下内容。php文件:

add_filter( \'pta_sus_public_output\', \'function_to_change_user_signups_list_headers_h4\');
  function function_to_change_user_signups_list_headers_h4( $text ) {
      $text = str_replace(
          array( \'Click on Clear to remove yourself from a signup.\' ),
          array( \'Sorry you can not clear\' ),
          $text
       );
       return $text;
}

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

这条路apply_filters() 工作原理是开发人员提供过滤器的名称和可以过滤的值。这允许其他代码通过添加过滤器来修改该值。

然而,除了价值,apply_filters() 还可以将其他值传递给挂钩函数,以便它们可以在过滤器回调中使用。这些参数作为附加参数传递给apply_filters():

$value = apply_filters( \'my_filter_name\', \'abc\', \'arg1\', \'arg2\' );
在该示例中,正在筛选的开发人员\'abc\' 也可以访问\'arg1\'\'arg2\' 在他们的代码中。这对于传递有关上下文的附加信息或用于创建原始值的原始数据非常有用,以便其他开发人员可以重用它。

WordPress中的一个示例是the_title 滤器此过滤器还传递帖子ID,以便过滤器回调可以知道标题被过滤的帖子的ID:

apply_filters( \'the_title\', $title, $id );
在您的示例中,相同的过滤器应用于两个单独的值,但每个实例传递一个唯一的第二个值,可用于区分这两个值。

因此,如果我们只看过滤器:

apply_filters( \'pta_sus_public_output\', __(\'You have signed up for the following\', \'pta_volunteer_sus\'), \'user_signups_list_headers_h3\' )
共有3部分:

  • pta_sus_public_output 筛选器的名称
  • __(\'You have signed up for the following\', \'pta_volunteer_sus\'), 可以筛选的值
  • user_signups_list_headers_h3 可以在筛选器回调中使用的附加值
在第二个过滤器中,最后一个参数不同:

apply_filters( \'pta_sus_public_output\', __(\'Click on Clear to remove yourself from a signup.\', \'pta_volunteer_sus\'), \'user_signups_list_headers_h4\' )
那样的话user_signups_list_headers_h4.

因此,通过检查第二个值,您可以将过滤器仅应用于其中一个过滤器实例。

为此,需要指定在回调函数中接受2个参数:

add_filter( \'pta_sus_public_output\', \'function_to_change_user_signups_list_headers_h4\', 10, 2 );
这是最后一个数字。这是$accepted_args property. 之前的数字是优先级,10是默认值。

然后在你的function_to_change_user_signups_list_headers_h4() 函数中,接受附加参数,并使用所需的变量名。我会用$context:

function function_to_change_user_signups_list_headers_h4( $text, $context ) {
的价值$context 现在将是user_signups_list_headers_h3user_signups_list_headers_h4 (或者,如果该过滤器在插件的其他地方使用,则可能是其他值),我们可以使用此选项仅将您的过滤器应用于您想要的过滤器:

function function_to_change_user_signups_list_headers_h4( $text, $context ) {
    if ( \'user_signups_list_headers_h4\' === $context ) {
        $text = \'Sorry you can not clear\';
    }

    return $text;
}

相关推荐

Multiple category filters

我正在为客户端开发一个事件插件,我需要几个“类别过滤器”。现在我有了一个post类型的参数,我注册了该post类型和分类法,并创建了另一个分类法。在我的category metabox中,我只有第一个分类显示为我可以选择的类别。如果我在我的菜单上创建另一个帖子类型,它会像一个不同的插件菜单一样显示,其中子菜单是我的帖子类型所在的位置,我只想有一个不同的“类别过滤器”,我可以将类别添加到其中,然后在同一个插件中显示为类别元框。所以现在我有一个“Place”的帖子类型和分类法,它显示在我的插件中,通常是一个类