Mon thème exécute une boucle qui ne nécessite pas de termes de publication à afficher. Cependant, Wordpress Core exécute la fonction wp_get_object_terms à chaque itération.
Cela entraîne des requêtes de base de données inutiles telles que:
SELECT t.*, tt.*
FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt
ON tt.term_id = t.term_id
INNER JOIN wp_term_relationships AS tr
ON tr.term_taxonomy_id = tt.term_taxonomy_id
WHERE tt.taxonomy IN ('category')
AND tr.object_id IN (81595)
ORDER BY t.name ASC
Existe-t-il un moyen d'empêcher/réduire ou d'optimiser l'appel de wp_get_object_terms () uniquement lorsque c'est absolument nécessaire?
Je l'ai retrouvé dans get_permalink (), qui est appelé dans la boucle. Notre site utilise des liens permanents qui incluent la catégorie, ce qui explique pourquoi il recherche la catégorie pour chaque message. Y aurait-il un moyen d'optimiser cela?
Comme vous l'avez précisé, puisque votre message, permaliens, inclut la catégorie WP, tente de trouver un moyen de les regrouper pour chaque message.
L’approche de base serait d’optimiser l’efficacité de la configuration générale plutôt que de gérer de manière microtechnique des générations d’objets. Si vous configurez le cache d'objets persistant pour le site, les informations de catégorie seront alors mises en cache de manière transparente en mémoire, au lieu d'être extraites de la base de données à chaque fois.
Si ce n'est pas une option ou si vous générez des liens à une échelle qui donne même un problème à la mise en cache des objets, il existe une alternative légèrement simpliste. Bien que vous ayez activé les "jolis" liens, cela ne signifie pas que les "pas jolis" liens ont cessé de fonctionner.
Vous pouvez utiliser la fonction wp_get_shortlink()
pour générer ce dernier type de liens (/?p=id
), ce qui réduirait considérablement les ressources.
Ils ne regarderont pas Bien dans le code source, mais lorsqu’ils seront visités, WP les redirigera vers de "jolies" versions de manière transparente. Bien sûr, les redirections excessives ne sont pas une bonne chose non plus, mais c'est à vous de choisir si le compromis est significatif pour votre situation.