Je n'arrive pas à comprendre, pourquoi offset
semble être transféré de WP_Query
personnalisé dans le modèle de page vers la requête principale plus bas?!
De mon functions.php
/**
* ::: Filter 'Custom Post Type' Archive Main Query :::
*/
add_action( 'pre_get_posts', 'filter_cpt_posts' );
function filter_cpt_posts( $query ) {
if ( ! is_admin() && $query->is_main_query() && ! is_post_type_archive( 'cpt' ) ) {
return $query;
}
else { // on is_post_type_archive( 'cpt' )
$query->set( 'offset', '1' );
return $query;
}
}
De mon archive-cpt.php :
<?php
$loop_recent_post = new WP_Query( array(
'post_type' => 'cpt',
'posts_per_page' => 1, // number of posts to display
'offset' => 0
) );
if ( $loop_recent_post->have_posts() ) {
while ( $loop_recent_post->have_posts() ) {
$loop_recent_post->the_post();
?>
<!-- HTML Code -->
<?php wp_reset_postdata(); ?>
et plus bas:
<?php
//query_posts( 'post_type=cpt&offset=1' ); //Get rid of `query_posts`
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
?>
Les messages commencent dans la requête principale avec offset=0
.
Pourquoi?
PS: oui
pre_get_posts
,wp_reset_query()
ne fait aucune différence après WP_Query
, j'ai suivi cet enregistrement .Cela aide d’écrire des problèmes.
Après que je n’ai pas beaucoup utilisé pre_get_posts
, je me suis trop concentré sur ce domaine pour la cause, mais c’était la clause if
.
Changé en
if ( ! is_admin() && $query->is_main_query() && ! is_post_type_archive( 'cpt' ) ) {
return $query;
}
elseif ( ! is_admin() && $query->is_main_query() && is_post_type_archive( 'cpt' ) ) { // on is_post_type_archive( 'cpt' )
$query->set( 'offset', '1' );
return $query;
}
else {
return $query;
}
Tout fonctionne bien. J'aime pre_get_posts
.