Felipe Elia conseils pour WordPress

WordPress est un CMS et donc la manipulation de contenu est l’un des principaux piliers de l’outil. Dans cet article, vous comprendrez le processus utilisé par WP pour récupérer ce qui doit être affiché et comment il est possible de modifier ce processus.

l’objet de ce texte ne se substitue en aucun cas à la documentation officielle, qui doit toujours être consultée. Votre objectif est de mettre en un seul endroit ce que les débutants devraient savoir avant de commencer à chercher plus d’informations.

qu’est-ce qu’une requête WordPress ?

Query en anglais signifie query et est généralement le terme utilisé pour désigner une instruction en SQL (Langage de requête structuré). Dans WordPress, nous appelons requêtes les requêtes de contenu effectuées via la classe wp_query.

qu’est-ce que WP_Query ?

WP_Query est la classe PHP derrière toutes les recherches de contenu dans WordPress. Il accepte plusieurs paramètres dans sa construction, y compris les types de publications, les métadonnées, les taxonomies et les dates, ainsi que la possibilité de créer des paramètres personnalisés.

la classe wp_query est déclenchée sur toutes les requêtes faites à votre site, à l’exception peut-être de très rares exceptions pour les adresses contrôlées par le plugin qui interrompent le flux normal. Chaque fois que nous appelons une page, un article, un terme de taxonomie, etc. WordPress interprète l’adresse demandée via l’API de réécriture et crée une WP_Query basée sur les arguments interprétés.

Balises conditionnelles et WP_Query

création de vos propres boucles: WP_Query et get_posts()

lorsque nous nous référons à la boucle dans WordPress, nous parlons d’itération (sans le n) par les messages sélectionnés. Habituellement, nous n’avons qu’une seule boucle, qui ressemble toujours au code ci-dessous:

s’il y a des messages, itérez-les. La première instruction à l’intérieur de while est the_post(), qui indique à WordPress de placer les variables du post suivant de la boucle dans la variable globale $post, via la méthode setup_postdata() de la classe wp_query.

c’est l’apparition de la boucle principale, c’est-à-dire l’itération par l’ensemble des publications trouvées par WordPress lors du décodage de la demande et de la recherche du contenu correspondant. Si nous avons besoin d’un autre ensemble de publications (contenu associé, contenu d’une certaine catégorie en dehors de votre fichier ou publications publiées après ce qui est affiché, par exemple), nous pouvons le faire de deux manières: créer un nouvel objet wp_query ou appeler la fonction get_posts(). Ils font tous les deux la même chose, mais ils vous reviendront des choses différentes.

création d’une boucle avec WP_Query

un exemple simple de la création d’une boucle avec WP_Query:

remarquez comment le test et l’itération sur have_posts() restent là, tout comme the_post(), mais cette fois en tant que méthodes de la variable que nous avons créée.

la fonction wp_reset_postdata() sert à restaurer la variable globale $post à son état avant notre requête, c’est-à-dire qu’elle remettra dans global $post le post de global $wp_query, que nous verrons plus loin.

création d’une boucle avec get_posts()

le même exemple en utilisant la fonction get_posts():

la fonction get_the_title() accepte en paramètre un post différent de ce qui se trouve dans la variable globale $post. Si vous devez utiliser la fonction_content(), par exemple, vous devrez modifier la fonction globale, comme suit:

différence entre WP_Query et get_posts()

la différence de base est celle à laquelle vous aurez accès. En utilisant WP_Query, vous avez accès au nombre de publications trouvées au total ($query->found_posts) et au nombre de pages possibles ($query->max_num_pages), par exemple. La fonction get_posts() apporte en revanche des arguments déjà remplis en plus d’être, par défaut, légèrement plus rapide: elle passe le paramètre no_found_rows comme true, empêchant la requête finale d’avoir l’option SQL_CALC_FOUND_ROWS et, avec cela, exemptant MySQL de passer le nombre total de lignes trouvées.

WordPress global wp_query et WordPress wp_the_query

dans ce processus d’interprétation de la requête et de génération de l’objet de classe wp_query, WordPress crée deux variables globales: $wp_query, que vous avez probablement vu quelque part, et $wp_the_query, qui sera toujours la copie originale de ce qui a été demandé par l’utilisateur. Si quelqu’un joue avec $wp_query, au moins nous pouvons le ramener à son état normal avec $wp_the_query. C’est exactement ce que fait la fonction wp_reset_query().

pourquoi query_posts() ne devrait-il pas être utilisé dans les fichiers de thème ?

il s’agit du flux par défaut d’une requête vers une adresse de votre site en dehors du tableau de bord:

vous ne devez pas utiliser query_posts() car il a déjà été appelé. En l’appelant à nouveau, vous dupliquerez le traitement (en demandant à WordPress de faire une autre requête) et en outre, vous ignorerez potentiellement ce que certains plugins ont déjà utilisé.

la pagination est un autre exemple de la façon dont l’utilisation de query_posts() peut perturber votre travail. Si vous souhaitez afficher 15 publications par page dans une certaine catégorie et essayer d’écraser le montant WP par défaut via query_posts(), vous aurez une situation où le premier élément de la deuxième page devrait être le 16ème, mais en fait ce n’est que le 11ème.

comment changer la requête principale ? Utiliser pre_get_posts

utiliser query_posts() est déconseillé depuis un certain temps. Depuis lors, beaucoup ont expliqué pourquoi et encouragé les développeurs à utiliser l’action pre_get_posts, en mettant l’accent sur Leo Bahiano, qui a affectueusement surnommé l’action preguetinho (l’utilisation de jeux de mots avec le preguetinho do Leo Bahiano est autorisée dans les commentaires).

l’utilisation est simple. Pour éliminer la pagination dans la recherche, par exemple, vous pouvez utiliser le code suivant dans le functions.php de votre thème :

le code attribue sa fonction à hook pre_get_posts, donc sa fonction sera exécutée chaque fois qu’une requête est traitée. En son sein, nous devons nous assurer que nous n’allons travailler que sur les requêtes nécessaires, nous testons donc si nous sommes vraiment dans la partie « avant » du site (de cette façon, nous ne perturbons rien du panneau), si nous sommes dans la requête principale de la page, c’est-à-dire si la requête en question est $wp_the_query et Si tout cela est vrai, nous changeons l’attribut posts_per_page en -1, ce qui signifie aucune limite de publications.

un autre exemple: supprimer une catégorie de la liste des articles de blog

si vous avez besoin de nombreuses modifications, vous pouvez les rejoindre toutes en une seule fonction:

conclusion



+