WordPress Twenty Sixteen mit Auszug (Excerpt) im Archiv

Twenty Sixteen ist das derzeitige Standard-Thema von WordPress. Es gefällt mir sehr gut, mit der Ausnahme, dass im Archiv (d. h. bei Kategorien, Tags, Jahr, Monat) der Inhalt von 10 Beiträgen vollständig angezeigt wird, mit Links zu jeweils weiteren 10 Beiträgen (Paginierung).

Um die Navigation auf der Seite zu verbessern, wollte ich stattdessen, dass nur die Auszüge (Excerpt, d. h. die manuell eingefügte oder automatisch erstellte Zusammenfassung) mit einem Link zum jeweiligen Artikel angezeigt werden. Und zwar alle Artikel der Kategorie / des Tags / des Jahres / des Monats auf einer Seite, also ohne Paginierung.

Da ich im Web nur Teillösungen gefunden habe, folgt hier eine Anleitung, die ohne jede Garantie frei verwendet werden kann.

Im Ordner meines Child-Themes habe ich die Datei archive.php erstellt mit:

<?php
/**
 * The template for displaying archive pages
 *
 * Used to display archive-type pages if nothing more specific matches a query.
 * For example, puts together date-based pages if no date.php file exists.
 *
 * If you'd like to further customize these archive views, you may create a
 * new template file for each one. For example, tag.php (Tag archives),
 * category.php (Category archives), author.php (Author archives), etc.
 *
 * @link https://codex.wordpress.org/Template_Hierarchy
 *
 * @package WordPress
 * @subpackage Riannek
 * @since Riannek 1.0
 */

get_header(); ?>

    <div id="primary" class="content-area">
        <main id="main" class="site-main" role="main">
<?php
/* remove pagination */
global $wp_query;
query_posts(
   array_merge(
      $wp_query->query,
      array('posts_per_page' => -1)
   )
);
?>

        <?php if ( have_posts() ) : ?>

            <header class="page-header">
                <?php
                    the_archive_title( '<h1 class="page-title">', '</h1>' );
                    the_archive_description( '<div class="taxonomy-description">', '</div>' );
                ?>
            </header><!-- .page-header -->

            <?php
            // Start the Loop.
            while ( have_posts() ) : the_post();

                /*
                 * Include the Post-Format-specific template for the content.
                 * If you want to override this in a child theme, then include a file
                 * called content-___.php (where ___ is the Post Format name) and that will be used instead.
                 */
                get_template_part( 'template-parts/archiv-content', get_post_format() );

            // End the loop.
            endwhile;

            // Previous/next page navigation.
            the_posts_pagination( array(
                'prev_text'          => __( 'Previous page', 'twentysixteen' ),
                'next_text'          => __( 'Next page', 'twentysixteen' ),
                'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentysixteen' ) . ' </span>',
            ) );

        // If no content, include the "No posts found" template.
        else :
            get_template_part( 'template-parts/content', 'none' );

        endif;
        ?>

        </main><!-- .site-main -->
    </div><!-- .content-area -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Am Anfang der Datei muss natürlich der Name des Child-Themes angepasst werden. Im Gegensatz zur Originaldatei wird hier die Paginierung entfernt und ich rufe für die einzelnen Artikel template-parts/archiv-content statt template-parts/content auf. Die Originaldatei content von Twenty Sixteen funktioniert so weiterhin z.B. für die Blog-Frontseite.

Nun benötigen wir in unserem Child-Theme die Datei template-parts/archiv-content.php:

<?php
/**
 * The template part for displaying content in Archive 
 *
 * @package WordPress
 * @subpackage Riannek
 * @since Riannek 1.0
 */
?>

<article id="post-<?php the_ID(); ?>" class="artikel-archiv">
    <div class="entry-content">
        <?php
the_title( sprintf( '<h2 class="archiv-entry-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h2>' );

            /* translators: %s: Name of current post */
            the_excerpt( sprintf(
                __( 'Continue reading %s', 'twentysixteen' ),
                the_title( '<span class="screen-reader-text">', '</span>', false )
            ) );

    ?>
    </div><!-- .entry-content -->

    <footer class="entry-footer">

        <?php
        twentysixteen_entry_date();
            edit_post_link(
                sprintf(
                    /* translators: %s: Name of current post */
                    __( 'Edit<span class="screen-reader-text"> "%s"</span>', 'twentysixteen' ),
                    get_the_title()
                ),
                '<span class="edit-link">',
                '</span>'
            );
        ?>
    </footer><!-- .entry-footer -->
</article><!-- #post-## -->

Die kritische Änderung im Vergleich zum Original ist „the_excerpt“, ich habe aber mehr geändert, damit die einzelnen Artikel weniger Platz benötigen: Keine Metadaten außer dem Datum, die Überschrift ist nach rechts eingerückt neben dem Datum usw.

Fehlen noch Änderungen im Stylesheet, damit die Abstände und die Schrift der Überschriften nicht so groß sind. Es reicht, folgendes im Stylesheet des Child-Themes einzufügen:

h2.archiv-entry-title {
    font-family: Montserrat, "Helvetica Neue", sans-serif;
    font-size: 19px;
    font-size: 1.1875rem;
    font-weight: 700;
    line-height: 1.25;
}

.artikel-archiv {
    margin-bottom: 2em !important;

}

Das war’s schon! Eine weitere Änderungen in meinem Child-Theme ist das Header-Bild im Hintergrund. Für schnelle kosmetische Anpassungen des Designs mit dem CSS-Stylesheet ist diese Anleitung hilfreich.