¿Por qué los filtros / acciones requieren un conteo de argumentos?

2

Estaba mirando plugin.php tratando de responder la pregunta anterior y no pude resolverlo. El código real que llama a los filtros es este:

do {
    foreach( (array) current($wp_filter[$tag]) as $the_ )
        if ( !is_null($the_['function']) ){
            $args[1] = $value;
            $value = call_user_func_array($the_['function'], array_slice($args, 1, (int) $the_['accepted_args']));
        }

} while ( next($wp_filter[$tag]) !== false );

Si (int) $the_['accepted_args'] no estaba allí, simplemente pasaría todo lo disponible a la función de destino sin ningún efecto adverso para funciones con parámetros menos formales.

    
pregunta Lex R 29.05.2013 - 12:30

1 respuesta

4
  1. Por compatibilidad con versiones anteriores.

    Puede utilizar la misma devolución de llamada para varios filtros. Dentro de esa devolución de llamada, debe usar current_filter() para determinar el contexto. Pero algunos complementos usan el número de argumentos pasados en su lugar. Cambiar eso rompería estos complementos.

    Es por eso que siempre debes usar la API (aquí: current_filter() ) y no una construcción inventada.

  2. Además, PHP emitirá una advertencia cuando pase más parámetros a una función nativa de lo que esa función espera.

Vea Ticket # 14671 Anule el argumento de "argumentos aceptados" en add_filter () y add_action ()

    
respondido por el fuxia 29.05.2013 - 12:36

Lea otras preguntas en las etiquetas