Où mettre le crochet WordPress? Dépend de

Utilisez nrsquoimporte quelle matrice de catégorie pour catégoriser nrsquoimporte quel poste. Nous pouvons étendre cette classe pour changer des champs ou des catégories, et même les utiliser pour ajouter ou supprimer des méthodes de champ de la logique interne, respectivement.
Maintenant, nous pouvons tester la logique de cette classe et les fonctions de crochet et de rappel séparément. En utilisant des méthodes statiques, pouvez avoir une classe avec des méthodes statiques qui traitent les callbacks de crochet. Cette politique offre bon nombre des mêmes avantages que ceux décrits ci dessus, mais elle offre également des avantages organisationnels à lrsquoutilisation de classes pour construire le Code. Cet exemple passe drsquoune fonction à une classe avec une méthode statique pour effectuer essentiellement la même opération: lt?php
classe Term_Control_1 {
**
* Crea oggetto
*
funzione pubblica __construct(){
add_action( 039save_post039, [ $this, 039save_post039 ], 10 )
}
**
* Quando il post viene aggiornato, controlla se ha la categoria 7 o meno e aggiungi o rimuovi il campo personalizzato
*
* @param $id
*
funzione pubblica save_post( $id ){
remove_action( 039save_post039, [ $this, 039save_post039 ] )
if( ! empty( $_POST[ 039post_category039 ] ) ampamp in_array( 7, $_POST[ 039post_category039 ] ) ){
update_post_meta( $id, 039_fancy_cats039, 1 )
}altro{
delete_post_meta( $id, 039_fancy_cats039, 1 )
}
}
}
nuovo Term_Control_1() In questo codice, dichiariamo una classe che farà eseguire una funzione di callback sull039hook save_post. Su save_post, controlliamo se è stata impostata una categoria specifica sul post e aggiorniamo un campo personalizzato basato su quello. Per assicurarci che questo codice venga eseguito, istanziamo la classe in fondo al file.
Funziona perfettamente, ma è fortemente accoppiato sia al POST super globale e quindi a una richiesta HTTP sia all039API dei plugin. E se volessimo eseguire questo codice da qualche altra parte, utilizzando un ID post arbitrario? Per farlo, dovremmo creare un039altra istanza della classe, che è fattibile. Dovremmo anche cambiare il superglobale POST, che è possibile ma disordinato. Come faremmo il test unitario di questo? Dovremmo prendere in giro la richiesta HTTP in entrata e l039API dei plugin. Questo è fattibile controlla wp_mock ma mi piacerebbe testare tutto in isolamento.
Questo approccio funziona ma presenta problemi. Inoltre, non possiamo rimuovere il gancio, il che potrebbe essere un problema. Inoltre, questa classe è stata istanziata su ogni richiesta, il che è uno spreco. Un punto minore quando guardiamo un file, ma se questo modello viene ripetuto, i conti possono aumentare. Aggiunta del gancio con una funzione L039utilizzo di una funzione per gestire gli hook è necessario quando non si utilizzano le classi, ma è ottimo anche per un approccio progettuale orientato agli oggetti. La funzione di callback, una funzione viene utilizzata solo per gestire la traduzione da un contesto specifico alla dipendenza appropriata di cui la classe ha bisogno.
Ciò consente alla classe di fungere da sistema per l039aggiornamento dei meta dei post in base alle categorie, in qualsiasi contesto e alla funzione di essere il connettore dell039API dei plugin. Questa classe non ha alcuna interazione con l039API Plugins o la richiesta HTTP corrente. Questa non è la sua preoccupazione. La preoccupazione di questa classe è la logica del sistema, non interagire con altre API. Questo è un esempio pratico dei vantaggi derivanti dal seguire il principio della separazione delle preoccupazioni. Questa classe non si preoccupa di come ottiene i suoi input, si preoccupa solo di cosa fa con i suoi input. Abbiamo ancora bisogno di una connessione a quegli input: i dati POST e l039API Plugin. Quindi, dovremo avere una funzione per questo:
Mettre à jour categories ()
}
}
Ce nrsquoest pas forcément mieux. Crsquoest peut être plus lent que quelques nanosecondes, sans avantage réel. Mais avec quelques modifications, il pourrait devenir plus utile.
Changeons lrsquoopération utilisée en
}
}
Dans cet exemple, il fait la même chose, mais si nous avons drsquoautres parties du système qui doivent fonctionner sur drsquoautres crochets administratifs, nous pouvons le faire sans autre changement important.
Mettre à jour categories ()
}
}
Fonction statique publique Load _ scripts () {
}
} pour changer la classe pour ajouter un nouveau crochet, il suffit drsquoune nouvelle méthode et drsquoun appel à add _ action () ou add fitler (). Jrsquoaime ça parce qursquoil gardera cette classe comme couche pour lrsquoAPI du plug in de connexion, tout en gardant la logique en dehors de cette classe de connexion.
Crochets dans les classes Je place souvent les crochets dans la même classe que leur logique. Il est encore fortement couplé, mais il vaut parfois la peine de garder le Code associé ensemble. Parfois, les avantages de la lisibilité sont plus importants que drsquoautres préoccupations. Mais je nrsquoaime toujours pas utiliser le générateur parce que
rsquoune réponse viole le principe de la responsabilité individuelle. Poser cette question à toute la classe ne nous donnera qursquoune seule réponse. Ces principes de conception logicielle nrsquoimpliquent pas de règles arbitraires de forage. Il srsquoagit de créer un code facile à utiliser et à reconstruire. Nrsquoest il pas important de les suivre afin de rendre le système plus stable et de ne pas avoir besoin de facteurs importants pour apporter des changements? Il y a beaucoup de place pour ajouter des crochets. Par exemple, votre projet pourrait avoir besoin drsquoun système de gestion des crochets plus robuste. Mais je mrsquoarrête ici parce que le but de cet article est de permettre drsquoexaminer les conséquences des décisions de conception sur lrsquoAPI plug in. Considérez vos décisions en matière de flexibilité, de testabilité et de remaniement pour obtenir un meilleur Code. Il srsquoagit drsquoun mode de pensée pratique conforme au principe drsquoune responsabilité unique et drsquoune séparation des intérêts. Comme la plupart des questions. tu me demandes

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

ContactPress Supported By WordPress Plugins