既然这确实是一个有趣的问题,我将继续编译一个答案。
方法1非常好,可以使用。下面是我用来测试它的紧凑代码:
function fnc_1( $content ) { return \'func1 :: \'.$content; }
function fnc_2( $content ) { return \'func2 :: \'.$content; }
function fnc_3( $content ) { return \'func3 :: \'.$content; }
$a = false;
$b = false;
if ( $a ) add_filter( \'the_content\', \'fnc_1\' );
elseif ( $b ) add_filter( \'the_content\', \'fnc_2\' );
else add_filter( \'the_content\', \'fnc_3\' );
方法2
add_filter
不允许将其他参数传递给过滤器函数,但如果确实需要共享一个函数,可以在过滤器周围包装一个自定义过滤器,如下所示:
add_filter( \'wpse31470_filter_wrapper\', \'wpse31470_filter_wrapper_func\', null, 2 );
function wpse31470_filter_wrapper_func( $content, $condition ) {
if ( $condition ) return \'TRUE :: \'.$content;
else return \'FALSE ::\'.$content;
}
add_filter( \'the_content\', \'wpse31470_the_content_filter\' );
function wpse31470_the_content_filter( $content ) {
$condition = true;
return apply_filters( \'wpse31470_filter_wrapper\', $content, $condition );
}
的目的
wpse31470_the_content_filter
是包装由提供的参数
the_content
过滤并传递给您自己
wpse31470_filter_wrapper
以及任何其他参数。