Je regardais simplement plugin.php essayer de répondre à la question ci-dessus et je ne pouvais pas résoudre le problème. Le code qui appelle les filtres est le suivant:
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']
n'y était pas, il transmettrait simplement tout ce qui est disponible à la fonction cible sans aucun impact négatif pour les fonctions avec des paramètres moins formels.
En raison de la compatibilité ascendante.
Vous pouvez utiliser le même rappel pour plusieurs filtres. À l'intérieur de ce rappel, vous devez utiliser current_filter()
pour déterminer le contexte. Mais certains plugins utilisent le nombre d'arguments passés à la place. Changer cela briserait ces plugins.
C’est pourquoi vous devez toujours utiliser l’API (ici: current_filter()
) et non une construction inventée.
De plus, PHP émettra un avertissement lorsque vous transmettez plus de paramètres à une fonction native que cette fonction ne l’attend.
See Ticket # 14671 Obsolète l'argument "arguments acceptés" dans add_filter () et add_action ()