WordPress - pre_get_posts no lugar de query_posts nas páginas
Minha situação é um pouco complexa, tentarei explicar da maneira mais sucinta possível.
Atualmente estou usandoquery_posts
modificar a consulta principal em páginas personalizadas no meu site, que, até onde eu sei, funciona muito bem, embora eu tenha lido que usar query_posts é uma prática recomendada por vários motivos diferentes.
Então, por que estou usandoquery_posts
e não criando umWP_Query
objeto que você pode perguntar?
É porque estou usando o plug-in infinito-scroll, o infinito-scroll não funciona bem com o WP_query, mas funciona absolutamente bem quando você simplesmente modifica a consulta principal com query_posts. Por exemplo, a paginação não funciona usando rolagem infinita + WP_query (preocupação principal).
Em uma página, estou modificando a consulta para obter as postagens mais visualizadas.
<?php $paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1; ?>
<?php query_posts( array( 'meta_key' => 'wpb_post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC' , 'paged' => $paged, ) ); ?>
<?php if (have_posts()) : ?>
<?php while ( have_posts() ) : the_post() ?>
<?php if ( has_post_format( 'video' )) {
get_template_part( 'video-post' );
}elseif ( has_post_format( 'image' )) {
get_template_part( 'image-post' );
} else {
get_template_part( 'standard-post' );
}
?>
<?php endwhile;?>
<?php endif; ?>
Então, depois de muita leitura, entendo que minha outra opção para modificar a consulta principal está usandopre_get_posts
, embora eu esteja um pouco inseguro sobre como fazer isso.
Veja isso por exemplo: -
function textdomain_exclude_category( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'cat', '-1,-2' );
}
}
add_action( 'pre_get_posts', 'textdomain_exclude_category' );
Tudo bem, tão simples - se for a página inicial, modifique a consulta principal e exclua duas categorias.
O que eu estou confuso e não consigo descobrir é: -
o cenário de caso de uso para modelos de página personalizados. Com minhaquery_posts
modificação eu posso simplesmente soltar na matriz antesif (have_posts())
, selecione o modelo da minha página, publique-o e agora eu vou. Compre_get_posts
Não consigo descobrir como dizer, por exemplo$query->most-viewed
etc
array( 'meta_key' => 'wpb_post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC' , 'paged' => $paged, ) );
Como diabos eu faço isso compre_get_posts
e verifique se está paginado, ou seja. trabalha com rolagem infinita? Em todos os exemplos que eu já vi compre_get_posts
não há matrizes.