Afficher un nombre différent de messages par page en fonction du contexte (par exemple, la page d'accueil, recherche, archives)
Question
Dans les paramètres de lecture, il y a lieu de fixer le nombre de postes montré que affecte le nombre de postes indiqués dans tous les contextes. Je voudrais montrer à la place un certain nombre de postes sur la page d'accueil, et un nombre différent de messages sur les pages comme des archives, des résultats de recherche, etc.
Je me rends compte que je pouvais le faire en éditant les fichiers de thème et de modifier les paramètres de la requête, mais je préférerais avoir plus facilement accès à la page d'un simple. Il y a longtemps, je suis tombé sur un plugin qui a fait cela, mais je ne trouve pas maintenant.
Quelqu'un sait-il d'un plug-in pour ce faire, ou même une fonction que je pourrais mettre en functions.php pour accomplir la même chose?
La solution
Je crois que la meilleure façon de le faire dans un plug-in est d'exécuter la fonction exemple suivant lorsque le crochet d'action pre_get_posts
est rencontrée. L'objet $wp_query
est disponible, qui signifie que vos balises conditionnelles sont disponibles, mais avant WordPress obtient les messages, ce qui signifie que vous modifiez requête vars avant la première requête en cours d'exécution, plutôt que d'ajouter est utilisé une deuxième requête comme quand query_posts () dans un fichier thème.
function custom_posts_per_page($query) {
if (is_home()) {
$query->set('posts_per_page', 8);
}
if (is_search()) {
$query->set('posts_per_page', -1);
}
if (is_archive()) {
$query->set('posts_per_page', 25);
} //endif
} //function
//this adds the function above to the 'pre_get_posts' action
add_action('pre_get_posts', 'custom_posts_per_page');
Autres conseils
vous pouvez faire une boucle personnalisée à l'aide query_posts et spécifier le nombre de messages de is_home, is_archive, etc.
une simple instruction if avec query_posts
Pour ajouter à cette question. Est-ce que quelqu'un sait déterminer post_per_page pour cette fonction de fonction custom_posts_per_page ($ query) si ajouter la nouvelle page index.php comme ceci:
<?php
if ($_GET['new'] == 1)
{
include ( TEMPLATEPATH . '/newpage.php' );
exit;
}
?>
Je me rends compte que je pouvais le faire en éditant les fichiers de thème et de modifier les paramètres de la requête, mais je préférerais avoir plus facilement accès à une page de paramètres simples.
Dans l'intérêt de l'exhaustivité, je trouve que query_posts
combiné avec concaténation de $query_string
fonctionne bien.
Je mis ce code dans index.php
(mon thème n'a pas category.php) ...
<?php
if (!is_front_page()) {
query_posts($query_string . "&posts_per_page=20");
}
?>
Bien sûr, ce que nous faisons ici est de modifier la chaîne de requête interne de la boucle, remplaçant le nombre par défaut de messages par page .
Il fonctionne un régal pour fournir une plus petite liste des messages sur la page d'accueil où je montre les messages pleins, et une liste beaucoup plus de messages partout ailleurs (catégories, par date, etc.) où je ne participe qu'à des résumés de poste.
Cependant, s'il vous plaît faire noter que contrairement à la réponse acceptée, cela exécuté deux fois la requête , donc il est pas aussi bien une solution.