Des rapports indiquent que remove_filter
ne fonctionne pas dans certaines circonstances et que nous devrions proposer des alternatives . Cependant, l'article n'indique pas vraiment dans quelles circonstances cela se produit.
Je suis à la recherche d'exemples de code qui rompront remove_filter
, avec WordPress et la version PHP, et éventuellement d'autres informations pertinentes, fournies. Je pense que l'extrait suivant devrait être un modèle utilisable:
<?php
include('wp-load.php');
function filtertest_function($value)
{
return 'Filtered';
}
var_dump(apply_filters('filtertest', 'Original value'));
add_filter('filtertest', 'filtertest_function');
var_dump(apply_filters('filtertest', 'Original value'));
remove_filter('filtertest', 'filtertest_function');
var_dump(apply_filters('filtertest', 'Original value'));
Cela retournera le prévu:
string(14) "Original value"
string(8) "Filtered"
string(14) "Original value"
Je crois que l'erreur survient dans certains cas où le filtre fait partie d'une classe ou utilise plusieurs filtres. Je comprends _wp_filter_build_unique_id
est impliqué . Veuillez indiquer où se trouve dans ce code la source de l'erreur.
En fait, il s’agit d’un sujet très spécifique lié à un problème de développement Wordpress. Je vous suggère fortement de garder une trace du ticket de trac si vous avez aimé mon article. Je suppose que c’est la meilleure chose à faire pour savoir quand les problèmes entrent en jeu et comment les résoudre techniquement (si vous n’aimez pas le n’utilisez pas remove_filter()
- réponse).
Du point de vue théorique, considérons que les types de données utilisés ne sont pas traités de manière stricte pour assurer la même fonctionnalité sur toutes les valeurs possibles (f (n)! = F (n)). En bref: un design cassé.
Est-ce que cela signifie que ça va toujours casser dans la pratique? - Non! C'est juste que ça peut arriver parfois. Et puis vous êtes pris au piège lorsque vous devez vous fier à remove_filter()
.
Une meilleure suggestion pourrait être celle-ci: Si vous développez des plugins qui utilisent des hooks comme méthodes de classe, assurez-vous que le plugin est exécuté sur les installations avec PHP 5.2/5.3.
Veuillez conserver la discussion technique dans le ticket de train. Et si vous êtes sérieusement intéressé, aidez-nous à corriger les faiblesses de la conception actuelle.
Comme Denis a commenté sur le blog de Hakre, il s'agit d'un exemple très simple du problème.
function run_me_once() {
remove_action( 'foobar', 'run_me_once' );
echo 'test....';
}
add_action( 'foobar', 'run_me_once' );
function run_me2() {
echo 'test2....';
}
add_action( 'foobar', 'run_me2', 11 );
echo '';
do_action( 'foobar' ); // test....
echo '';
echo '';
do_action( 'foobar' ); // test2....
echo '';
Avant d'exécuter ce code, demandez-vous ce que vous attendez du résultat. Une fois que vous avez décidé du résultat, lancez-le et voyez ce qui se passe.