Je travaille sur un modèle personnalisé pour un nouveau thème qui utilise une instance WP_Query
pour sélectionner les publications de 2 types de publication avec 2 champs personnalisés non vides. En fonction de la section du site, une variable $current_zone
peut être définie pour déterminer la catégorie à partir de laquelle interroger.
// Custom loop
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$custom_loop_args = array(
'post_type' => array('videos', 'post'),
'post_status' => 'publish',
'ignore_sticky_posts' => 1,
'paged' => $paged,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'article_source',
'compare' => '!=',
'value' => ''
),
array(
'key' => 'article_link',
'compare' => '!=',
'value' => ''
)
)
);
// Check the current zone
global $current_zone;
// Check for category match to current zone
if ( term_exists($current_zone, 'category') ) {
$term = get_term_by('name', $current_zone, 'category');
$custom_loop_args['cat'] = $term->term_id;
}
// Create unique identifier for caching
$cache_id = ( isset($term) ) ? '_term-' . $term->term_id : '_main';
// Run query or get transient cache
if ( ( $custom_loop = get_transient( "curated_wpquery$cache_id" ) ) === false ) {
// It wasn't there, so regenerate the data and save the transient
$custom_loop = new WP_Query( $custom_loop_args );
set_transient( "curated_wpquery$cache_id", $custom_loop, ( 60 * 60 * 1 ) );
}
J'utilise les transitoires dans le but d'accélérer le processus, ce qui fonctionne, mais la requête initiale prend 35 secondes et nécessite une quantité de mémoire incroyable. Nous avons une assez grande base de données, avec environ 10 553 enregistrements dans la table posts
. J'ai effacé les révisions, mais je n'ai pas remarqué d'augmentation des performances.
Ma vraie question est donc: comment puis-je améliorer les performances de cette requête? Une requête $wpdb
personnalisée serait-elle préférable, ou la requête de champs personnalisés de cette manière est-elle totalement improductive?
Toute aide est très appréciée.
Les données de champ personnalisées sont stockées dans la table postmeta
et il est probable que l'analyse de cette table provoque la lenteur.
Vous devriez:
EXPLAIN
leur . Cela vous donnera une bien meilleure idée de ce qui se passe et de la marche à suivre.