web-dev-qa-db-fra.com

Taxonomies personnalisées WP très lent - moyen de réparer?

J'ai défini trois taxonomies personnalisées dans mon thème pour les types de publication en pièce jointe dans Wordpress 3.5.1. Une taxonomie est non hiérarchique (c'est-à-dire des balises) et contient environ 800 termes. (J'utilise WP pour créer un site photo rapide et sale. Ces termes de taxonomie s'apparentent à des mots-clés photo. Oui, on pourrait se demander si WP est le bon outil pour ce...). Une autre des taxonomies est plate et ne contient pas encore de termes.

En bref, mon site est devenu extrêmement lent. Je ne suis pas du tout au courant de MySQL ni des bases de données en général, mais lorsque j'utilise le plugin Blackbox pour avoir un aperçu des requêtes sous-jacentes lors du chargement des pages, je constate que deux requêtes en particulier ajoutent énorme surcharge de mes pages. Les temps de demande de page prennent plusieurs secondes , ce qui n'était pas le cas avant la création des taxonomies. Une seule requête (ci-dessous) prend en moyenne 1,4 seconde.

Que se passe-t-il et y a-t-il un moyen d'arrêter cela? Existe-t-il une raison pour que WP doive effectuer ces requêtes de taxonomie coûteuses sur chaque page?

Actuellement, une requête exécutée par WP ressemble à ceci:

SELECT t.*, tt.*, tr.object_id
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 ('myCustomTaxonomyName') AND tr.object_id IN (
    list of 200+ post IDs
)
ORDER BY t.name ASC;

Et l'autre se ressemble, sauf avec des noms de taxonomie différents:

SELECT t.*, tt.*, tr.object_id
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 ('attachment_tax1', 'attachment_tax2') AND tr.object_id IN (
    list of 200+ post IDs
)
 ORDER BY t.name ASC;
1
Tim

Cela n'a rien à voir avec les taxonomies personnalisées. J'utilisais un extrait de code du thème par défaut "vingt-douze" pour image.php, qui parcourait chaque publication du blog pour obtenir les pièces jointes enfants, et donc les associations de taxonomie de chacune de ces publications. Modifier mon image.php en supprimant cette boucle foreach () a résolu le problème.

1
Tim