¿Enganchar diferentes funciones al mismo filtro de forma condicional O Pasar argumentos adicionales al filtro existente?

2

¿Es posible enganchar 3 funciones diferentes al mismo filtro condicionalmente, como:

<?php
if(a){
    add_filter('the_content', 'fnc_1');
}
else if(b){
    add_filter('the_content', 'fnc_2');
}
else{
    add_filter('the_content', 'fnc_3');
}
?>

O si esto no es posible, ¿puedo pasar un argumento adicional a la misma función para marcar mis 3 condiciones diferentes? Algo como:

<?php
if(a){
    add_filter('the_content', 'fnc_1', 'condition_a');
}
else if(b){
    add_filter('the_content', 'fnc_1', 'condition_b');
}
else{
    add_filter('the_content', 'fnc_1', 'condition_c');
}
?>

Todo lo que pude encontrar en mi lectura es que tiene que hacer algo con apply_filters , pero no pudo evitarlo.

Por favor, ¿alguien puede decirme cómo lograr esto? Gracias!

    
pregunta Rutwick Gangurde 19.10.2011 - 07:30

1 respuesta

5

Ya que parece ser una pregunta interesante, seguiré compilando una respuesta.

Método 1

Totalmente bien, funcionará. Aquí está el código compacto que usé para probarlo:

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' );

Método 2

add_filter no le permite pasar argumentos adicionales a la función de filtro, pero si realmente necesita compartir Una función puede envolver un filtro personalizado alrededor del filtro así:

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 );
}

El propósito de wpse31470_the_content_filter es envolver el argumento proporcionado por the_content filter y pasarlo a su propio wpse31470_filter_wrapper junto con cualquier otro argumento adicional.

    
respondido por el soulseekah 19.10.2011 - 08:16

Lea otras preguntas en las etiquetas