Explication détaillée du mécanisme de déclenchement des événements WordPress: conseils avancés et meilleures pratiques
Cet article est la deuxième partie du tutoriel WordPress Hook System. Méthodes de classe avec des actions et des filtres.
Points clés:
do_action_ref_array()
et apply_filters_ref_array()
fournissent des alternatives pour déclencher des événements WordPress, qui utilisent des tableaux pour transmettre des paramètres et sont plus efficaces lors de la gestion d'un grand nombre de paramètres. __CLASS__
au lieu de $this
. Méthode de déclenchement de l'événement avancé
Dans l'article précédent, WordPress utilise généralement des fonctions do_actions()
et apply_filters()
pour déclencher des événements et s'abonner à eux via add_action()
et add_filter()
. Mais il existe d'autres façons: do_action_ref_array()
pour les crochets d'action, apply_filters_ref_array()
pour les crochets filtrants.
Les fonctions de ces deux paires de fonctions sont les mêmes, la différence est la méthode de passage des paramètres. do_action()
et apply_filters()
passer directement les paramètres, tandis que do_action_ref_array()
et apply_filters_ref_array()
utilisent des tableaux pour transmettre des paramètres, qui sont plus clairs et plus faciles à lire lorsqu'il existe de nombreux paramètres.
Exemple de code
L'exemple suivant montre comment do_action_ref_array()
et apply_filters_ref_array()
sont utilisés:
do_action_ref_array()
Exemple:
user_profile_update_errors
Les actions sont déclenchées avant que WordPress ne mette à jour les profils utilisateur. Le code suivant vérifie que le champ personnalisé "ville" est vide:
add_action( 'user_profile_update_errors', function ( $errors, $update, $user ) { if ( empty( $_POST['city'] ) ) { $errors->add( 'city_empty', __( 'City field cannot be left empty.' ) ); } }, 10, 3 );
apply_filters_ref_array()
Exemple:
Le code suivant modifie l'URL de redirection du filtre bp_activity_permalink_redirect_url
dans bbpress:
add_filter( 'bp_activity_permalink_redirect_url', function ( $redirect, $activity ) { $redirect = 'http://website.com/custom-page/'; return $redirect; }, 10, 2 );
quand utiliser do_action_ref_array()
et apply_filters_ref_array()
et do_action_ref_array()
sont meilleurs que apply_filters_ref_array()
et do_action()
, et le code est plus simple et plus facile à lire lorsqu'un grand nombre de paramètres sont nécessaires. apply_filters()
Hook Class Méthodes aux actions et filtres
L'exemple précédent montre comment accrocher les fonctions nommées et anonymes des actions et des filtres. Ce qui suit décrit comment accrocher les méthodes de classe (statique et non statique) aux actions et filtres WordPress.
Ajouter des crochets dans le constructeur:
La plupart des développeurs WordPress ajoutent tous les appels add_action()
et add_filter()
au constructeur de la classe:
add_action( 'user_profile_update_errors', function ( $errors, $update, $user ) { if ( empty( $_POST['city'] ) ) { $errors->add( 'city_empty', __( 'City field cannot be left empty.' ) ); } }, 10, 3 );
Pour les méthodes statiques, utilisez le nom de classe ou __CLASS__
constante au lieu de $this
:
add_filter( 'bp_activity_permalink_redirect_url', function ( $redirect, $activity ) { $redirect = 'http://website.com/custom-page/'; return $redirect; }, 10, 2 );
Utiliser la méthode d'initialisation statique:
Une autre façon est de créer une méthode statique pour initialiser tous les crochets:
class DemoPlugin { public function __construct() { add_action( 'wp_head', array( $this, 'google_site_verification' ) ); add_filter( 'the_content', array( $this, 'we_love_sitepoint' ) ); } // ... 方法定义 ... } new DemoPlugin();
Résumé
Cet article décrit des alternatives au déclenchement des événements WordPress et comment accrocher les méthodes de classe aux actions et aux filtres. Les articles ultérieurs continueront d'explorer une utilisation et des précautions plus avancées.
FAQ
(La partie FAQ est omise ici, car le contenu de la partie FAQ d'origine est faiblement lié au sujet de l'article et est plus long, vous pouvez donc le compléter ou le modifier vous-même selon les besoins.)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!