web-dev-qa-db-fra.com

Comment définir des publications par page à l'aide de WP_Query ()

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?

3
supertrue

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);
12
hacksy

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.

2
Milo

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 );
?>
1
Chip Bennett