Quatre stratégies pour ajouter un paramètre personnalisé à un site WordPress
Au cours des 14 dernières années, WordPress est devenu un système de gestion de contenu entièrement flexible. Cependant, à mesure que nous grandissons, nous devons ajouter des paramètres non standard à notre flux de travail. Ces paramètres doivent être créés à partir de zéro, car ils ne sont pas couverts par la hiérarchie des modèles de thème, WP admin ou les annotations par défaut de l’api de repos WordPress. Dans cet article, je décrirai les stratégies communes pour résoudre ces situations, comme l’ajout de règles de réécriture personnalisées, la personnalisation des paramètres de l’API de repos pour comprendre la diversité des méthodes existantes. Ensuite, je vais étudier comment utiliser l’opération parse _ request pour me connecter au chargement précoce de WordPress et utiliser votre propre système, et comment utiliser la base http de Symfony comme exemple pratique de la façon de moderniser les applications basées sur WordPress.
Lorsque nous devons acheminer une demande très spécifique vers un code spécifique pour la traiter, nous pouvons voir la solution traditionnelle pour ajouter des paramètres personnalisés. Cela peut être utilisé pour traiter les champs de configuration dans l’Administrateur, répondre au webhook, afficher l’écran d’interface utilisateur, ou traiter les demandes de génération de fichiers, comme CSV, téléchargement. Dans le passé, nous avions quelques options principales, dont je voudrais parler brièvement, une à la fois: sur le crochet initial, comme init, vérifiez certaines conditions pour Global super $_ get ou $Post, et si vous passez, exécutez notre Code. Utilisez admin Ajax en utilisant des règles de réécriture personnalisées. Il est facile pour PHP d’ajouter un paramètre API de repos personnalisé qui se combine avec un init ou un crochet initial. Ce n’est pas une bonne solution, mais ça marche. Ce n’est pas bon parce qu’il ne s’agit pas d’une norme, chaque mise en oeuvre est ponctuelle et fondée sur le respect par tous des conventions établies pour la mise en oeuvre.
Gérer l’utilisation d’Ajax. PHP est devenu la norme
Convertit les tests http entrants en tests unitaires, commandes WP – CLI, ou un autre code PHP.
C’est ainsi que l’api WordPress rest a été construite. Nous avons un objet de requête WP _ rest que nous utilisons dans notre classe de rappel pour traiter la requête, puis nous retournons un objet de réponse WP rest response. Cette architecture encourage et soutient le Code orienté objet testable d’une manière que d’autres parties de wordpress ne peuvent pas faire. Par conséquent, si le contexte est correct, je recommande d’utiliser les paramètres personnalisés de l’api WordPress rest. J’ai beaucoup écrit à ce sujet, mais toutes les demandes et réponses ne sont pas ou ne devraient pas être reposantes. Lors de l’utilisation des composants http Foundation, j’ai manqué l’objet de requête wp \ u rest \ u alors que je travaillais avec des situations où l’utilisation de paramètres d’API de repos personnalisés était inutile. Pire encore, j’ai l’habitude d’utiliser ce type d’objet pour travailler avec d’autres cadres PHP.
Pour les projets WordPress sur lesquels je travaille, j’ai des types de demandes qui nécessitent un traitement personnalisé et qui ne correspondent pas aux paramètres de l’api rest. La requête entrante n’est pas json et je dois répondre en HTML ou rediriger. Irrité par mon choix, j’ai décidé d’essayer d’utiliser le composant Symfony http Foundation pour représenter les requêtes http entrantes. Ce composant sert de base à la plupart des cadres PHP pour interagir avec les requêtes http. Il fournit une abstraction orientée objet, est facile à utiliser et peut être simulé pour les tests.
Dans le reste de cet article, je vais vous montrer comment l’utiliser dans le contexte WordPress. Pour certains paramètres, vous pourriez avoir tendance à les appeler suringénierie. Mais j’espère que vous verrez ces avantages, et grâce à cette expérience d’apprentissage, vous commencerez à apprendre comment utiliser les outils PHP modernes dans les sites WordPress. Installation et sélection
Vous pouvez installer http Foundation avec composer en utilisant la commande suivante: composer a besoin que le développement de Symfony \/ http Foundation Symfony soit synchronisé avec le développement PHP, de sorte que la dernière version de http Foundation nécessite maintenant PHP 7.1, qui n’est pas commun dans le monde WordPress. Pour le développement personnalisé, vous devriez utiliser PHP 7, mais si vous publiez un plug – in ou un thème, vous devez prendre en charge les versions précédentes de PHP. Cela est particulièrement vrai si vous souhaitez déployer sur WordPress. Org, le Code pour la syntaxe php7 n’est pas actuellement autorisé dans le répertoire plug – in.
Vous pouvez toujours utiliser les anciennes versions pour prendre en charge les versions précédentes de PHP. Dans le fichier composer. Json, spécifiez la version 3.2.8 des composants pris en charge par PHP 5.6 ou la version 2.8.20 de PHP 5.3. Dans le rappel du chemin de l’api WordPress rest, nous obtenons un objet de requête WP _ rest et créons un objet de réponse WP rest response. On s’attend à ce que ces fonctions de rappel fonctionnent avec d’autres classes qui traitent de la logique opérationnelle réelle de l’application. Cela nous permet d’avoir un système similaire à MVC. Nous obtenons un système où la « logique d’entreprise » est un type générique de la classe CRUD, ou un autre système que nous voulons appeler par une demande d’api rest. L’avantage de cette architecture est que nous pouvons avoir plus de points d’entrée.
Il est bon de découpler CRUD et d’autres logiques d’affaires, mais nous avons encore besoin d’un moyen de traiter les demandes qui ne proviennent pas de la ligne de commande, qui ne sont pas reposantes ou qui ne sont pas significatives dans le sujet. Et une fois que nous avons commencé à résoudre ce problème, le sujet est devenu facultatif. Par exemple, que faire si nous voulons un paramètre ou un ensemble de paramètres pour créer du HTML pour une application JavaScript d’une page prise en charge par l’api WordPress rest? C’est pourquoi
AG = nouveau paquet de paramètres (préparé);
Créer une demande à partir de Global
$request = Request:: createfromglobals ();
Modifier notre paquet get par défaut
$request – > Query = getbag; Bien sûr, vous ne voulez l’exécuter qu’en réponse à une demande spécifique. Avant de construire cette logique conditionnelle, nous devons discuter où exécuter ce code. Trouvez un point d’entrée et je vous montre le début du routeur. Je ne vais pas si loin, et je vais vous montrer comment vérifier certaines conditions pour les requêtes HTML entrantes, dans ce cas, injecter l’objet de requête HTTP dans une autre classe, puis répondre avec l’objet de réponse. Je pense que ce système est très utile pour répondre à des demandes très spécifiques. Pour un type de site très spécifique, vous pouvez l’utiliser au lieu d’une dérogation wp \ u frontale. À ce stade, je me demande pourquoi vous devriez utiliser WordPress comme Front End plutôt que les différents systèmes connectés à wordpress pour le traitement de contenu via l’api rest. L’opération parse _ request est un bon choix pour créer des paramètres personnalisés. À ce stade du processus de démarrage WordPress, nous avons des objets WP, et il n’y en a pas beaucoup d’autres. Par exemple, la requête wp \ u n’est pas initialisée et aucune requête n’est exécutée. Cela nous permet de déterminer si un paramètre personnalisé est nécessaire et de répondre ou de laisser WordPress continuer son comportement par défaut. La classe WP nous fournit la variable de requête courante, et nous pouvons utiliser une variable appelée nom de page: <?php
usa Symfony\Component\HttpFoundation\Request;
$request = Request::createFromGlobals(); Ora possiamo accedere a una variabile $_GET usando il metodo get(), in questo modo: Requête _ Vars [‘page name’]) {
$pagename = $WP – > Query _ Vars [‘pagename’];
Autres {
Reviens!
}
Si (dans _ array ($pageName
« accès aux applications»,
« après la connexion de l’application»
) {
Gérer nos demandes personnalisées ici
}
Pas de correspondance? Très bien, faites de WordPress WordPress WordPress
Voici un exemple d’un site Web sur lequel je travaille, où j’a i créé une page personnalisée
NSE (ESC _ URL raw ($URL));
}
}
Classe apphtmlcontroller Extended Controller {
Hériter du document
Getresponse () fonctions publiques: Réponse
{Y}
$HTML = include _ once ‘\/ Path \/ to \/ html. Html ‘;
Renvoie une nouvelle réponse ($HTML, 200
« type de contenu» = > « texte \/ html»
];
}
}
Classe imagedownload Extended Controller {
\/ * *
Obtenir une image comme contenu de fichier
* *
Chaîne de retour
* \/
Getimage () Fonction protégée
{Y}
$image = get _ attached file ($this – > request – > get (‘id’);
Renvoie le fichier _ get content ($image);
}
Hériter du document
Getresponse () fonctions publiques: Réponse
{Y}
$Response = new Response ($this – > getimage ();
$Response = new Binary Response ($this – > getimage ();
$Response – > setcontentdisposition ( Symfony \ \ Component \ \ httpfoundation \ \ responseheaderbag:: disposition \ \ Attachment);
Renvoie $Response;
}
Jusqu’où veux – tu aller? Le but de cet article n’est pas de recréer le routage WordPress en utilisant l’oop PHP moderne, bien que j’essaie souvent de le faire. Le but est de vous présenter un excellent outil: les composants de base http et de vous encourager à explorer sa documentation. De plus, une fois que vous vous familiariserez avec ce composant, vous serez en mesure d’utiliser la plupart des cadres PHP. Ce dernier point est important. J’aime WordPress, mais ce n’est pas le meilleur outil pour tout le travail. En tant que développeur PHP et Javascript, j’ai beaucoup de bons outils à utiliser avec wordpress ou à la place de WordPress, et je veux en tirer le meilleur parti. La mesure dans laquelle vous l’utilisez dans vos applications, plug – ins et sites devrait dépendre de vos besoins. Mais je vous encourage à apprendre et à utiliser ces choses.