Comment améliorer les performances de WordPress `WP_Query`


Passez en revue les meilleures pratiques WP_Query.

(nul)

L’un des outils les plus importants de la boîte à outils WordPress est WP_Query. Cette classe permet aux développeurs de récupérer des publications ou des pages de la base de données WordPress en fonction de critères spécifiques.

En utilisant WP_Query les développeurs peuvent créer des modèles personnalisés, afficher des publications dans un ordre spécifique ou même créer des requêtes personnalisées à utiliser dans des widgets ou des plugins.

Qu’est-ce que WP_Queryet pourquoi devriez-vous l’utiliser ?

`WP_Query` est une classe dans WordPress pour récupérer des articles ou des pages de la base de données en fonction de critères spécifiques. C’est un outil puissant qui permet aux développeurs de :

  1. Personnaliser la boucle WordPress et afficher les messages en fonction des caractéristiques choisies.
  1. Créer des requêtes personnalisées pour afficher des articles basés sur des conditions complexes qui autrement ne peuvent pas être atteintes en utilisant des requêtes WordPress standard.
  1. Afficher les publications associées basés sur des catégories ou des balises communes, ce qui augmente l’engagement sur votre site Web.
  1. Créer des widgets personnalisés qui affichent des messages en fonction de vos besoins.

Global, WP_Query permet aux développeurs d’afficher les publications de manière hautement personnalisée, ce qui en fait un outil essentiel pour les sites WordPress.

Problèmes courants avec WP_Query

Bien que WP_Query est un outil puissant pour personnaliser la récupération des publications, il existe des problèmes potentiels que les développeurs doivent garder à l’esprit avant de les mettre en œuvre.

  1. Performance: mal utilisé, WP_Query peut avoir un impact négatif sur les performances du site Web. Par exemple, la récupération d’un grand nombre de messages avec des requêtes complexes peut ralentir le temps de réponse.
  1. Conflits de requête : WP_Query peut entrer en conflit avec d’autres requêtes sur votre site Web, en particulier si vous utilisez des plugins ou des thèmes qui utilisent également des requêtes personnalisées.
  1. Sécurité: WP_Query peut poser des risques de sécurité dans certains cas. Par exemple, si vous autorisez les utilisateurs à rechercher des publications sur votre site Web à l’aide de WP_Querynettoyez l’entrée de l’utilisateur pour empêcher les attaques par injection SQL.
  1. Compatibilité: WP_Query fait partie du noyau de WordPress. Les mises à jour peuvent entraîner des problèmes de compatibilité avec les plugins ou les thèmes qui reposent sur la requête.

Pour éviter ces problèmes, suivez les meilleures pratiques lors de l’utilisation WP_Queryy compris l’optimisation des requêtes pour les performances, le nettoyage des entrées des utilisateurs et la surveillance des problèmes de compatibilité lors de la mise à jour de WordPress, des plugins et des thèmes.

Comment améliorer WP_Query performance

Améliorer WP_Query performances en optimisant vos requêtes et en réduisant la charge du serveur. Vous trouverez ci-dessous quelques bonnes pratiques courantes que vous pouvez utiliser pour améliorer votre WP_Query performance.

1. fields paramètre

En utilisant le fields paramètre pour limiter les informations extraites de la base de données peut aider à améliorer les performances de votre WP_Query. Par exemple, si vous n’avez besoin que des identifiants de publication, utilisez fields => ids.

Remarque : Ce paramètre est limité aux champs ID et ID=>parent. Pour un exemple d’utilisation de ce paramètre, notre propre ingénieur WordPress VIP Derrick Tennant partage des informations sur la mise en cache sur WordPress.

2. no_found_rows paramètre

Lors de la pagination, ce paramètre est utile si vous n’avez pas besoin de connaître le nombre total de messages correspondant à votre requête, définissez no_found_rows => vrai. Cela sautera le SQL_CALC_FOUND_ROWSce qui peut avoir un impact significatif sur les performances des requêtes.

3. update_post_meta_cache et update_post_term_cache

Désactivez les mises à jour du post-méta et du cache de termes si vous n’en avez pas besoin dans votre requête en définissant update_post_meta_cache => false et update_post_term_cache => false. Cela peut réduire le nombre de requêtes supplémentaires effectuées.

4. cache_results paramètre

Si vous utilisez la mise en cache d’objets (par exemple, Memcached ou Redis), vous pouvez désactiver la mise en cache interne de WordPress en définissant cache_results => faux. Cependant, cela n’est pas recommandé si vous ne disposez d’aucun mécanisme de mise en cache externe.

5. post__in et post__not_in

L’utilisation de ces paramètres peut aider à filtrer les résultats en fonction d’ID de publication spécifiques. Cependant, évitez de les utiliser de manière excessive ou avec un grand nombre d’ID, car cela peut entraîner des problèmes de performances.

Ces paramètres ne doivent être utilisés que pour les petits sites. A l’échelle de l’entreprise, nous ne recommande pas du tout d’utiliser `post__not_in`.

6. post_type et post_status

Soyez précis avec votre type de publication et votre statut de publication pour éviter la récupération inutile de données. Par exemple, si vous n’avez besoin que d’articles publiés, définissez post_status => publish.

Assurer post_status est défini permet aux utilisateurs (connectés ou déconnectés) d’utiliser les mêmes requêtes (en cache). Réglage de la post_status augmente également les taux de réussite.

7. date_query

Utilisez le date_query paramètre pour filtrer les publications par plage de dates au lieu d’utiliser des champs méta personnalisés pour stocker les dates. Ceci est plus efficace car WordPress est optimisé pour fonctionner avec des requêtes liées à la date.

8. Pagination et posts_per_page

Limitez le nombre de résultats par page avec le posts_per_page paramètre. Veillez à ne pas le définir trop haut (par exemple `-1`), car cela peut entraîner des problèmes de performances importants.

9. Utilisez l’API de mise en cache des objets persistants :

Mettez en cache les résultats de vos requêtes à l’aide de la API de mise en cache d’objets persistants qui offre une granularité en séparant les caches en groupes. Sans plug-in de mise en cache d’objets, votre base de données peut être jonchée de données de cache transitoires, qui finiront par revenir en production si vous effectuez une importation SQL.

Note: Si vous utilisez une configuration de développement “locale” personnalisée, assurez-vous que la mise en cache des objets est configurée pour éviter les problèmes.

10. Utilisez le pre_get_posts filtre

Modifier la requête principale à l’aide de la pre_get_posts filtre pour éviter de créer des requêtes supplémentaires. Cela peut être une approche plus efficace par rapport à l’utilisation WP_Query directement dans vos modèles.

Déchargement vers Enterprise Search est un autre moyen simple et rapide d’accélérer un WP_Query. Quand le VIP_ENABLE_VIP_SEARCH_QUERY_INTEGRATION constante est définie sur truetoutes les requêtes de recherche frontales standard passées avec s arguments (par exemple, /?s=) sont automatiquement envoyés à Elasticsearch.

Note: Toutes les requêtes ne doivent pas être transférées vers Enterprise Search. Les requêtes qui ne montrent pas de problèmes de performances peuvent continuer à être traitées par MySQL.

Exemple de WP_Query avec des paramètres communs

function my_main_query_filter( $query ) {

        // always check these in a pre_get_posts filter or you could cause unwanted changes to other queries
	if ( is_admin() || ! $query->is_main_query() ) {
		return;
        }
        
        // limit category queries to the main category, do not include children
	if ( is_category() ) {
		$query->set( 'include_children', false );
        }

        // default, when logged in, the post_status list might include 'private'
        $query->set( 'post_status', 'publish' );

        // when not paginating (e.g., a widget displaying just 5 posts)
        $query->set( 'no_found_rows', true );

        // "sticky posts" add complexity
        $query->set( 'ignore_sticky_posts', true );

        // not typically needed when serving archive pages
        $query->set( 'update_meta_cache', false );
}
add_action( 'pre_get_posts', 'my_main_query_filter' );

Les améliorations ne sont pas uniformes

N’oubliez pas d’évaluer vos besoins spécifiques avant de mettre en œuvre l’une de ces recommandations, car elles peuvent ne pas s’appliquer à toutes les situations. Tester et surveiller les performances de votre site avant et après les modifications est crucial pour garantir des résultats optimaux.

Avoir des questions?



<Voir les plus beaux thèmes