Support » Themes » archive.php twenty twenty theme

  • morgana17

    (@morgana17)


    Hallo Zusammen,

    ich habe für das child-theme von twenty-twenty eine archive.php erstellt. Diese wird auch für die Kategorie-Seiten verwendet. Nun möchte ich gerne dass für die Blogseite wo alle Beiträge aufgelistet sind die archive.php ebenso verwendet wird.

    Wenn ich in WordPress bei Einstellungen meine Beitragsseite festlege, verwendet er für diese Beitragsseite die index.php.
    Ich verstehe nicht warum, wenn eine archive.php vorhanden ist, müsste doch diese automatisch verwendet werden?

    Anbei der Code meiner archive.php

    <?php
    /**
     * The template for displaying archive pages
     *
     * This is the most generic template file in a WordPress theme
     * and one of the two required files for a theme (the other being style.css).
     * It is used to display a page when nothing more specific matches a query.
     * E.g., it puts together the home page when no home.php file exists.
     *
     * @link https://developer.wordpress.org/themes/basics/template-hierarchy/
     *
     * @package WordPress
     * @subpackage Twenty_Twenty
     * @since Twenty Twenty 1.0
     */
    
    get_header();
    ?>
    
    <main id="site-content" class="grau" role="main">
    	
    	<div class="inhalt-container">
    	
    	<div class="inhalt">
    
    	<?php
    
    	$archive_title    = '';
    	$archive_subtitle = '';
    
    	if ( is_search() ) {
    		global $wp_query;
    
    		$archive_title = sprintf(
    			'%1$s %2$s',
    			'<span class="color-accent">' . __( 'Search:', 'twentytwenty' ) . '</span>',
    			'&ldquo;' . get_search_query() . '&rdquo;'
    		);
    
    		if ( $wp_query->found_posts ) {
    			$archive_subtitle = sprintf(
    				/* translators: %s: Number of search results. */
    				_n(
    					'We found %s result for your search.',
    					'We found %s results for your search.',
    					$wp_query->found_posts,
    					'twentytwenty'
    				),
    				number_format_i18n( $wp_query->found_posts )
    			);
    		} else {
    			$archive_subtitle = __( 'We could not find any results for your search. You can give it another try through the search form below.', 'twentytwenty' );
    		}
    	} elseif ( is_archive() && ! have_posts() ) {
    		$archive_title = __( 'Nothing Found', 'twentytwenty' );
    	} elseif ( ! is_home() ) {
    		$archive_title    = get_the_archive_title();
    		$archive_subtitle = get_the_archive_description();
    	}
    
    	if ( $archive_title || $archive_subtitle ) {
    		?>
    
    		<header class="archive-header has-text-align-center header-footer-group">
    
    			<div class="archive-header-inner section-inner medium">
    
    				<?php if ( $archive_title ) { ?>
    					<h1 class="archive-title"><?php echo wp_kses_post( $archive_title ); ?></h1>
    				<?php } ?>
    
    				<?php if ( $archive_subtitle ) { ?>
    					<div class="archive-subtitle section-inner thin max-percentage intro-text"><?php echo wp_kses_post( wpautop( $archive_subtitle ) ); ?></div>
    				<?php } ?>
    
    			</div><!-- .archive-header-inner -->
    
    		</header><!-- .archive-header -->
    
    		<?php
    	}
    
    	if ( have_posts() ) {
    
    		$i = 0;
    		
    		 the_archive_title( '<h1 class="page-title">', '</h1>' );
    
    		while ( have_posts() ) {
    			$i++;
    			if ( $i > 1 ) {
    				echo '<hr class="post-separator styled-separator is-style-wide section-inner" aria-hidden="true" />';
    			}
    			the_post();
    
    			get_template_part( 'template-parts/contentblog', get_post_type() );
    
    		}
    	} elseif ( is_search() ) {
    		?>
    
    		<div class="no-search-results-form section-inner thin">
    
    			<?php
    			get_search_form(
    				array(
    					'aria_label' => __( 'search again', 'twentytwenty' ),
    				)
    			);
    			?>
    
    		</div><!-- .no-search-results -->
    
    		<?php
    	}
    	?>
    		
    		</div><!-- .inhalt -->
    	
    	<div class="seitenleiste">
    	
    	<?php dynamic_sidebar('smartslider_area_1'); ?>
    		
    		</div><!-- .seitenleiste -->
    		</div><!-- .inhalt-container -->
    
    	<?php get_template_part( 'template-parts/pagination' ); ?>
    
    </main><!-- #site-content -->
    
    <?php get_template_part( 'template-parts/footer-menus-widgets' ); ?>
    
    <?php
    get_footer();
    
Ansicht von 3 Antworten - 1 bis 3 (von insgesamt 3)
  • Moderator Bego Mario Garde

    (@pixolin)

    Im WordPress-Core ist eine Funktion enthalten, die als „Template Hierarchy“ bezeichnet wird. Vereinfach ausgedrückt, versucht WordPress beim Aufruf einer Website ein optimal geeigentes Template zu finden und fällt, falls das Template kein entsprechendes Template anbietet, auf ein allgemeineres Template zurück. Du kannst so in einem Child-Theme z.B. für eine statische Webseite „Über mich“ ein ganz eigenes Template page-ueber-mich.php verwenden. Hast du das nicht angelegt, sucht WordPress im (Child-)Theme nach einem Template page.php. Hat sich der Theme-Entwickler entschieden, alle Webseiten irgendwie gleich aussehen zu lassen und kein Template page.php zu schreiben, sucht WordPress ein noch allgemeineres Template single.php und in letzter Instanz ein Template index.php, das zumindest im Parent-Theme zwingend vorhanden sein muss (sonst wird dir bei Theme-Installation angezeigt, das Theme sei defekt). Diese Grafik, die du von links nach rechts lesen solltest, veranschaulicht das ganz schön:

    Template Hierarchy
    (zum Vergrößern anklicken)

    In der Grafik siehst du auch, dass das Template archive.php für alle Webseiten gedacht ist, die Blogbeiträge nach bestimmten Kriterien zusammenfassen: Autor, Datum, Kategorie, Schlagwörter, benutzerdefinierten Sortierkriterien und benutzerdefinierten Inhaltstypen. Für die Beitragsübersichtsseite ist das Template home.php gedacht und falls es das nicht gibt, fällt WordPress auf das Template index.php zurück.

    Übrigens halten sich nicht alle Themes an die Template-Hierarchy, sondern prüfen in sehr allgemein gehaltenen Templates (index.php) mit Hilfe von Conditional Tags, um welche Art von Inhalt es geht und passen die Darstellung entsprechend an. Außerdem gibt es die Möglichkeit, über die Funktion get_template_parts() unterschiedliche Template-Teile je nach Inhaltsart aufzurufen.

    Im Theme TwentyTwenty werden in der index.php Conditional Tags wie is_search() (es handelt sich um die Ausgabe von Suchergebnissen) oder is_archive() verwendet, weshalb das Theme auf ein eigenes Template archive.php verzichtet. Die Template-Parts für unterschiedliche Inhalte findest du im Theme-Unterverzeichnis template-parts.

    Fügst du nun in einem Child-Theme ein eigenes Template archive.php hinzu, greift das Conditional Tag in der index.php nicht mehr – das Template archive.php wird für alle Archiv-Seiten aufgrund der Template-Hierarchy bevorzugt verwendet. Für deine Seite mit der Blogbeitragsübersicht verwendet WordPress aber weiterhin das Template index.php des Parent Theme, weil a) das Template archive.php nur für andere (Archiv-)Seiten greift und b) keine Template home.php vorhanden ist, im Rahmen der Template-Hierarchy also auf das allgemein gehaltenere Template index.php zurückgefallen werden muss.

    Übrigens ist es heute in den meisten Fällen nicht notwendig, Child-Themes zu erstellen, weil du gestalterische Anpassungen mit eigenen CSS-Regeln im Customizer vornehmen kannst und inhaltliche Änderungen (z.B. eine geänderte Fußzeile) mit Code-Schnipseln umgesetzt werden können, die Hooks (Programmierschnittstellen) des Parent-Themes verwenden. Da die Erstellung von Child-Themes immer mit zusätzlichen Sicherheitsrisiken und einem erhöhten Wartungsaufwand verbunden ist, sollte hier immer abgewogen werden, ob sich gewünschte Anpassungen nicht eleganter umsetzen lassen.

    Thread-Ersteller morgana17

    (@morgana17)

    Dankeschön für die ausführliche Antwort. Jetzt ist es mir klar woran es liegt.

    Ich komme für die Layout Änderungen nur mit CSS nicht aus, da ich da nicht alles so umstellen kann wie gewünscht. Ich möchte oft die Positionen ändern also z. B. die Überschrift über dem Bild statt unter dem Bild wie im Parentheme usw. oder ich möchte zusätzlich Angaben anzeigen lassen oder ist so etwas mit den Hooks möglich? Hast Du hierzu eine Link wo ich mich diesbezüglich mehr einlesen kann?

    Vielen vielen Dank

    Moderator Bego Mario Garde

    (@pixolin)

    Ich kann dir nicht spontan sagen, ob sich die Reihenfolge zum Beispiel mit CSS-Grid ändern ließe. Manchmal geht es tatsächlich nur sehr schwer ohne ein Child-Theme.

    Ich wollte nur der Vollständigkeit halber darauf hinweisen, dass die Verwendung von Child-Themes zumindest abgewogen werden sollte. Das Problem ist grundsätzlich, dass dein Child-Theme nachträgliche Änderungen des Parent Theme nicht berücksichtigt (was ja durchaus auch gewünscht ist, aber auch zu Problemen führen kann).

Ansicht von 3 Antworten - 1 bis 3 (von insgesamt 3)