J'essaie de définir le nombre de posts_per_page de manière dynamique en utilisant ma propre variable. Ce code fonctionne bien:
query_posts( $query_string . "&posts_per_page=" . $myvar )
// then display the loop using get_template_part( 'loop' );
Cela fonctionne bien, mais j'aimerais savoir comment le faire en utilisant $ wp_query au lieu de query_posts. Cependant, cela ne fonctionne pas:
$wp_query->set('posts_per_page', $myvar)
// then display the loop using get_template_part( 'loop' );
Cela n'a aucun effet sur le nombre de messages affichés. Est-ce que j'utilise mal la méthode set ou est-ce qu'il manque quelque chose?
query_posts
refera la requête (détruit le fichier wp_query actuel, en crée un nouveau, puis effectue la requête avec les paramètres que vous lui transmettez)
Pour obtenir le même comportement après avoir défini le nouveau paramètre avec set_var
, vous devez interroger à nouveau la base de données en utilisant quelque chose comme ceci.
$wp_query->set('posts_per_page', 1);
$wp_query->query($wp_query->query_vars);
lorsque vous appelez query_posts
avec une requête modifiée dans votre modèle, vous exécutez une autre requête et ignorez l'original. essayer de définir une requête var dans votre modèle ne fonctionne pas car la requête d'origine a déjà eu lieu. pour utiliser $wp_query->set()
vous devez connecter avant la base de données est interrogée, par exemple sur pre_get_posts
.
Pourquoi avez-vous besoin d'utiliser $wp_query->set()
?
Ne pouvez-vous pas simplement utiliser:
<?php
$my_custom_query_args = array(
'posts_per_page' => $myvar
);
$my_custom_query = new WP_Query( $my_custom_query_args );
?>