Nas página de categorias do meu site Wordpress, uso dois Loop, o padrão e abaixo dele um new WP_Query. No primeiro é exibido posts que ainda vão expirar ou que não contenham expiração, enquanto no segundo eu só mostro os posts expirados.
Ao usar os dois loops, quando uso o plugin Query Monitor, ele me diz que há Queries duplicadas, mostrando a seguinte mensagem:
Query
SELECT term_taxonomy_id FROM wp_4sy3yu_term_taxonomy WHERE taxonomy = 'category' AND term_id IN (26)
Callers
W3_Db->default_query
2 calls
Potential Troublemakers
WP->query_posts
1 call WP_Query->__construct 1 call
Como faço para corrigir isso?
Abaixo estão os loops que uso:
PRE GET POSTS
-------------
// Pre Get Posts _Expiration-Date
add_action( 'pre_get_posts', function( $q ) {
if ( (is_home() || is_category() || is_tag() || is_search()) && $q->is_main_query() && !is_admin() ){
$q->set( 'post_type', array( 'post', 'post-cp' ) );
$date_now = date_i18n('Y-m-d H:i:s');
$meta_query = array(
'relation' => 'OR',
array(
'key' => '_expiration-date',
'compare' => 'NOT EXISTS',
),
array(
'key' => '_expiration-date',
'value' => strtotime($date_now),
'compare' => '>=',
'type' => 'NUMERIC',
),
);
$q->set( 'meta_query', $meta_query );
return $q;
}
});
// End
new WP_Query
------------
<?php
$date_now = date_i18n('Y-m-d H:i:s');
$meta_query = array(
'post_type' => array('post','post-cp'),
'category__in' => get_queried_object()->term_id,
'meta_key' => '_expiration-date',
'posts_per_page' => '20',
'orderby' => 'meta_value_num',
'meta_query' => array(
'key' => '_expiration-date',
'value' => strtotime($date_now),
'compare' => '<',
'type' => 'NUMERIC',
));
$query = new WP_Query( $meta_query );
if ( $query->have_posts() ) :
while ( $query->have_posts() ) : $query->the_post();
get_template_part( 'content', get_post_format() );;
endwhile;
wp_reset_postdata();
endif;
?>