Utilisation de WordPress pour le développement d'applications Web Fonctionnalités Requêtes personnalisées avec WP_Query

Nous avons examiné comment WordPress peut être utilisé comme base pour le développement d'applications, mais l'un des aspects que nous n'avons pas encore abordés pour offrir les infrastructures les plus modernes consiste à interroger la base de données pour obtenir les résultats d'une vue donnée..

Plus précisément, nous n’avons pas expliqué comment extraire des informations de la base de données et les insérer dans nos pages..

Si vous êtes familier avec d'autres frameworks, alors vous connaissez probablement un système de mapping objet-relationnel (ORM).

Pour ceux qui ne sont pas familiers avec un ORM, en gros, c'est un logiciel qui se situe entre l'application et la base de données, et qui nous permet d'extraire des lignes et des colonnes en tant qu'objets, de les traiter comme tels, puis de sérialiser leurs modifications. à la base de données.

C'est vraiment cool. Cependant, WordPress ne ne pas offrir cette flexibilité.

Au lieu de cela, il propose un ensemble d’API qui nous permet d’apporter des modifications à la base de données. Nous avons un certain nombre d’API à notre disposition, que nous allons explorer au cours de cette dernière série d’articles..

Tout d'abord, nous allons jeter un oeil à WP_Query. Ensuite, nous allons jeter un oeil à WP_User_Query, suivi du $ wpdb objet qui est disponible en tant que global dans WordPress.

Mais plus là-dessus plus tard. Maintenant, à WP_Query.


Interroger la base de données WordPress

Avant de commencer à parler de l’interrogation de la base de données WordPress, je pense qu’il est essentiel d’expliquer exactement ce que cela signifie, pourquoi il est important et ce que cela implique..

Si rien d'autre, cela vise à niveler les attentes pour les lecteurs indépendamment de votre niveau d'expérience.

1. Qu'est-ce que cela signifie?

Interroger la base de données WordPress représente exactement ce que vous attendez: récupérer des informations de la base de données sur laquelle WordPress s'exécute.

Il n'y a rien de terriblement compliqué à ce sujet. Cependant, là sont plusieurs façons de le faire, et il est important de savoir comment le faire et ce qu'il faut éviter.

En règle générale, trois API sont disponibles et recommandées, et quelques-unes sont disponibles, mais sont ne pas recommandé pour une utilisation.

Dans cette série d'articles, nous allons couvrir tout cela.

2. Pourquoi est-ce important??

Si ce n’est rien d’autre, c’est important pour que nous puissions comprendre les moyens appropriés pour extraire et stocker des informations dans la base de données de la manière la plus sûre et la plus sûre possible..

Rappelez-vous: en programmation, ce n'est pas parce que quelque chose fonctionne que c'est la meilleure façon de le faire.

À cette fin, nous allons examiner les méthodes recommandées par WordPress pour extraire et enregistrer des données directement depuis et vers la base de données..

Après tout, nous voulons nous assurer que nous ne construisons pas uniquement des applications robustes, mais également des applications sécurisées et efficaces..

3. Qu'est-ce que cela implique??

Comme pour la plupart des choses, cela implique l'apprentissage d'une API. Au moins, c'est le cas pour deux des types de requête.

Pour le dernier article, vous devez connaître ou vouloir apprendre le langage SQL (comme WordPress Est-ce que vous permettent d'écrire des requêtes brutes sur la base de données). Mais plus là-dessus plus tard.

Pour l'instant, nous allons simplement nous concentrer sur les API, les paramètres disponibles et comment / quand les utiliser dans notre travail..


Présentation de WP_Query

Bien que vous puissiez tout lire sur WP_Query dans le Codex WordPress, je pense qu'il vaut la peine de résumer certains des points les plus subtils ici dans cet article, notamment si vous débutez dans WordPress ou envisagez sérieusement d'écrire des applications utilisant WordPress.

Le Codex définit WP_Query comme suit:

WP_Query est une classe… qui traite des subtilités d'une demande de publication (ou de pages) vers un blog WordPress. Wp-blog-header.php… donne les informations d'objet $ wp_query définissant la requête en cours, puis $ wp_query détermine le type de requête auquel elle fait face (éventuellement une archive de catégorie, une archive datée, un flux ou une recherche) et récupère la messages demandés. Il conserve de nombreuses informations sur la demande, qui peuvent être extraites ultérieurement..

Incroyablement technique, juste?

Voici comment penser du point de vue du consommateur:

  • WP_Query récupère des informations sur les publications, les pages, d'autres types de publication personnalisés et les données archivées, et rend disponibles les informations demandées sur ces données.

Du point de vue du développement, pensez comme ceci:

  • WP_Query est un moyen de récupérer des informations sur les types de publication et les données archivées, ainsi que leurs métadonnées associées, et plus encore. Les informations récupérées peuvent ensuite être lues, manipulées, sauvegardées et / ou affichées dans des fichiers modèles..

En bref, WP_Query nous fournit un moyen standard d'interroger la base de données en particulier sur les articles, les pages, les types d'articles personnalisés et les métadonnées associées, de manière à pouvoir utiliser plus facilement les informations stockées dans les magasins WordPress.

Remarque: Si vous recherchez des informations sur la gestion des utilisateurs ou l'écriture de requêtes SQL personnalisées, attendez la prochaine série d'articles car nous traiterons ces informations plus en détail à ce moment-là..

Comment utiliser WP_Query

Ok, alors nous avons couvert quoi WP_Query est, pourquoi il est bénéfique, et comment il devrait être utilisé, mais cela ne va que jusqu'à présent.

À ce stade, il est temps de regarder quels paramètres peuvent être transmis à WP_Query et quelques exemples pratiques d'utilisation.

Premier, WP_Query peut accepter des arguments pour: auteurs, catégories, tags, taxonomies, requêtes de recherche génériques, publications, pages, types de publication personnalisés, statut, pagination, ordre d'enregistrement, dates, champs personnalisés, autorisations, mise en cache et champs de retour.

En bref, à peu près tout ce qui concerne les types de publication, leurs balises de catégories et leurs métadonnées peut être récupéré en utilisant WP_Query.

Un mot sur la boucle

Si vous avez consulté un code de thème WordPress ou si vous avez utilisé WordPress avant de lire cet article, il est fort probable que vous ayez déjà vu un code tel que:

  

Et, dans WordPress, c'est ce qu'on appelle la boucle.

En bref, la boucle est l'endroit où tout se passe en ce qui concerne l'affichage des informations extraites d'une requête.

À cette fin, si vous écrivez une requête en utilisant WP_Query, alors vous allez probablement utiliser cette même structure pour votre propre travail.

Mais nous verrons plus à ce sujet dans un instant.

Exemples pratiques

Débuter avec WP_Query est facile. Par exemple, supposons que nous voulions créer un modèle qui affiche toutes les publications d’un seul auteur..

Pour ce faire, nous pouvons utiliser l'identifiant de l'auteur. Supposons donc que nous souhaitons récupérer tous les articles, pages et contenus écrits par l'auteur avec l'identifiant "1".

  1 ); $ my_query = new WP_Query ($ args);

Et ensuite nous voulons parcourir cela:

 if ($ my_query-> have_posts ()) while ($ my_query-> have_posts ()) // Travaillez avec le message de l'auteur 1 // Nous en parlerons plus tard dans l'article wp_reset_postdata (); 

Assez facile, à droite?

Mais faisons un peu plus compliqué. Disons que nous voulons uniquement récupérer les publications de cet auteur qui relèvent du type de publication personnalisé "Photographie" et qui ont été publiées en 2013..

Pour ce faire, nous passons cette information:

  1 'post_type' => 'photography "date_query' => array ('2013')); $ my_query = new WP_Query ($ args);

Et ensuite, parcourez la requête comme ceci:

 if ($ my_query-> have_posts ()) while ($ mon_query-> have_posts ()) // Travaillez avec les messages retournés // Nous en parlerons plus tard dans l'article wp_reset_postdata (); 

Mais cela peut devenir un peu plus complexe en fonction des informations dont nous disposons à tout moment du cycle de vie de l'application..

Par exemple, supposons que nous voulions créer par programme un type d'article personnalisé avec un titre et un slug spécifiques, mais seulement si on n'existe pas déjà.

Pour ce faire, vous devez suivre trois étapes:

  1. Passer les arguments nécessaires à la classe
  2. Parcourez The Loop à la recherche de publications éventuelles
  3. Si le poste n'existe pas, créez-le

Voici comment faire cela:

 // Recherchez le type de publication spécifié et le slug publiés ou se trouvant dans la corbeille $ args = array ('post_type' => $ post_type, 'post_name' => $ slug, 'post_status' => array ('publish', 'poubelle' ) ); $ post_type_query = new WP_Query ($ args); // Une publication contenant ces informations existe déjà, puis supprimez-la de la corbeille si ($ post_type_query-> have_posts ()) while ($ post_type_query-> have_posts ()) $ post_type_query-> the_post (); // Si la publication se trouve dans la corbeille, restaurez-la si ('corbeille' == strtolower (get_post_status (get_the_ID ()))) $ page = get_page (get_the_ID ()); $ page-> post_status = 'publier'; wp_update_post ($ page);  // S'il n'existe pas de message avec le titre spécifié, créez-le si (null == acme_get_permalink_by_slug ($ slug, $ post_type)) $ page_id = wp_insert_post (array ('comment_status' => 'fermé' , 'ping_status' => 'fermé', 'post_author' => 1, // l'administrateur crée la page 'post_title' => $ title, 'post_name' => strtolower ($ slug), 'post_status' => 'publier ',' post_type '=> strtolower ($ post_type))); // Si un modèle est spécifié dans les arguments de la fonction, appliquons-le si (null! = $ Template) update_post_meta (get_the_ID (), '_wp_page_template', $ template);  // Nous parlerons de cette ligne plus tard dans l'article wp_reset_postdata ();

Comme vous pouvez le constater, vous pouvez effectuer des requêtes très puissantes et effectuer un travail très intelligent avec WordPress et WP_Query si vous savez gérer les paramètres correctement.

Maintenant, dans le code ci-dessus, lorsque nous cherchons à savoir si le message existe déjà dans la corbeille, il sont des moyens plus optimaux d'écrire une requête pour vérifier cela; cependant, le code ci-dessus est destiné à illustrer davantage un exemple de la façon de le faire en utilisant WP_Query qu'autre chose.

Au fur et à mesure que nous abordons ce sujet d'écriture de requêtes, nous verrons d'autres moyens de récupérer plus rapidement des informations (telles que l'utilisation de SQL brut pour SÉLECTIONNER déclarations et EFFACER ou METTRE À JOUR déclarations).

À cette fin, je vous recommande vivement de vous familiariser avec tous les paramètres acceptés. Bien qu'il y ait beaucoup d'options (ce qui est une bonne chose, à mon avis), il existe un moyen relativement standard de les transmettre, de sorte que beaucoup d'entre elles fonctionnent de la même manière que d'autres..

C'est-à-dire qu'une fois que vous en avez appris quelques-unes, il est facile de prendre le reste.

En plus de cela, si vous voulez vraiment comprendre un peu plus les requêtes, je vous recommande de regarder comment les paramètres correspondent aux données de la base de données sous-jacente..

Quand utiliser WP_Query

Bien sûr, cela soulève la question de quand devriez-vous utiliser WP_Query.

Après tout, WordPress possède sa propre hiérarchie de modèles. Par conséquent, si vous travaillez avec un fichier qui correspond à cette hiérarchie, il utilisera automatiquement une requête liée à ce type de modèle..

Mais en écrivant des applications, voire des thèmes WordPress avancés, vous créerez des modèles qui ne rentrent pas dans la hiérarchie et qui nécessitent donc leur propre ensemble de requêtes..

C'est une des façons dont vous aurez besoin d'utiliser WP_Query.

Deuxièmement, si vous souhaitez récupérer un ensemble d’informations personnalisées - qu’il s’agisse d’un élément ou de plusieurs éléments - pour un message, une page, un type de message personnalisé, une catégorie, une taxonomie, etc. WP_Query est sans doute votre meilleure option.

Un mot sur la réinitialisation de la requête

Il y en a un gros eu à utiliser WP_Query c'est la clé pour compléter votre compréhension de l'API et qui est wp_reset_postdata ().

Tout comme le décrit le Codex:

Utilisez cette fonction pour restaurer la variable globale $ post de la boucle de requête principale après une boucle de requête secondaire utilisant le nouveau WP_Query. Il restaure la variable $ post à la publication en cours dans la requête principale.

En raison de la façon dont WordPress conserve les informations en utilisant global variables, il est crucial qu'une fois que vous avez conçu, exécuté et traité votre propre WP_Query, vous devez ensuite appeler cette fonction particulière pour restaurer les informations dans l'état antérieur à l'exécution de votre propre requête.

Cela permet à WordPress de continuer à parcourir en boucle les informations requises dans la hiérarchie des modèles et à éviter toute perte ou perte de données lors du rendu du contenu ultérieurement dans une page ou sur une autre page..


Next Up, WP_User_Query

Si WP_Query est si crucial pour la création de requêtes efficaces et sécurisées pour les types de publication et leurs attributs associés, comment procéder de la même manière pour les utilisateurs?

Après tout, nous avons déjà constaté que WordPress offre des installations fantastiques pour la gestion des comptes, mais nous n’avons pas encore expliqué comment nous pouvons gérer les utilisateurs en interrogeant la base de données..

Dans le prochain article, nous verrons cela exactement. Et si vous connaissez WP_Query - que vous devriez être après avoir lu cet article - alors vous trouverez le prochain article très facile à suivre.