web-dev-qa-db-fra.com

Afficher tous les articles pour une catégorie/un auteur spécifique

Je ne suis pas expérimenté avec WordPress. Mon objectif est d’afficher tous les articles de la page.

J'essayais d'afficher des articles sur une page comme ceci:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
...
<?php endwhile; else: ?>
  <p><?php _e( 'Sorry, no pages found.' ); ?></p>
<?php endif; ?>

J'ai rencontré un problème: il y a une limite de 5 messages à afficher par défaut. J'ai essayé d'utiliser WP_Query personnalisé:

<?php 
  $all_query = new WP_Query(array(
    'post_type'=>'post',
    'post_status'=>'publish',
    'posts_per_page'=>-1,
  ));
  if ($all_query->have_posts()) : while ($all_query->have_posts()) : $all_query->the_post();
?>

Il affiche tous les articles, mais également tous les articles, même sur les pages d’archives des catégories (articles de l’autre catégorie).

Si je comprends bien, je peux créer une page archive.php pour les catégories et les auteurs.

Existe-t-il une solution permettant d’utiliser boucle pour afficher tous les articles de la catégorie ou de l’auteur actuels?

1
Frelseren

Le nombre de publications affichées dans une boucle par défaut est contrôlé par Paramètres> Les pages de blog affichent au plus . Pour afficher tous les articles, vous pouvez entrer un nombre énorme, mais -1 (qui est la valeur à utiliser pour le paramètre posts_per_page dans WP_Query) ne fonctionne pas ici.

Il est possible d'afficher tous les articles de la catégorie et les archives de l'auteur tout en affichant un nombre limité d'articles dans votre blog principal. Pour ce faire, utilisez les pages du blog pour afficher au plus le paramètre permettant de configurer le nombre de publications à afficher dans le blog principal, puis utilisez le crochet pre_get_posts pour modifier les autres archives en conséquence. vos préférences. Ajoutez le code suivant au fichier functions.php de votre thème:

/**
 * Modify the query to show all posts on category and author archives.
 * 
 */
function wpse238882_pre_get_posts( $query ) {
  if ( ( $query->is_author() || $query->is_category() ) && $query->is_main_query() ) {
    $query->set( 'posts_per_page', -1 );
  }
}
add_action( 'pre_get_posts', 'wpse238882_pre_get_posts' );

Vous pouvez toujours utiliser les modèles author.php et category.php pour personnaliser la sortie de vos archives d'auteurs et de catégories, mais il n'est pas nécessaire de modifier simplement le nombre de publications affichées, comme indiqué ci-dessus. Consultez la hiérarchie des modèles pour plus d'informations sur la personnalisation des modèles.

1
Dave Romsey
<?php

//for each category, show all posts
$cat_args = array(
    'orderby'   => 'name',
    'order'     => 'ASC'
);
$categories = get_categories( $cat_args );

foreach( $categories as $category ) {

    $args = array(
        'showposts'         => -1,
        'post_per_page'     => -1,
        'category__in'      => array($category->term_id),
        'caller_get_posts'  =>1
    );
    $posts = get_posts( $args );

    if( $posts ) {
        echo '<p>Category: <a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name . '</a></p>';

        foreach( $posts as $post ) {
            setup_postdata( $post );

            while ( have_posts() ) : the_post(); 

                the_title( '<div>', '</div>' );

            endwhile;hp
        } // foreach($posts
    } // if ($posts
} // foreach($categories
0
Maria Teresa