Support » Allgemeine Fragen » Blog in Startseiten-Abschnitt Twenty Seventeen

  • Hallo,

    bin ziemlich neu in WP und lese mich durch die ganzen Informationen durch.

    Versuche mich nun an einer neuen Seite und möchte folgendes darstellen.

    Die Startseite soll eine Statische sein, und anschliessend sollen die Blogbeiträge gezeigt werden.

    Dazu habe ich unter Customizer -> Startseiten-Einstellungen die Statische Seite und die Blog Seite angelegt.

    Dann gehe ich unter Customizer -> Theme-Option -> Startseiten-Abschnitt und gebe die Blog Seite an.

    Soweit so gut, nur leider werden mir da nur die Überschriften angezeigt mit Datum u.s.w., aber leider kein Inhalt.

    Ich möchte gerne das der komplette Inhalt mit Bilder u.s.w. angezeigt wird.

    Ist dies irgendwie möglich, habe ich etwas übersehen?

    Vielen Dank im Voraus schon mal.

    viele Grüße

    M. Z.

Ansicht von 8 Antworten - 1 bis 8 (von insgesamt 8)
  • Moderator Bego Mario Garde

    (@pixolin)

    WordPress zeigt auf der Startseite wahlweise Blogbeiträge oder eine statische Seite. Beim Theme Twenty Seventeen ist eine Besonderheit, dass eine statische Seite den Inhalt von vier statischen Seiten ausgeben kann. Damit ist aber weiterhin keine Mischung von statischen Seiten und Blogbeiträgen gemeint, was spätestens bei der Paginierung Probleme bereiten würde. Gibst du eine Seite an, die eigentlich als Platzhalter für die Beitragsübersicht eingestellt ist, wird nur der Seitentitel und der (nicht vorhandene) Inhalt der Seite ausgegeben.

    Änderungen dieser Funktionalität sind nur über ein Child-Theme möglich, bei dem du im Template für die Startseite oberhalb der Schleife (Loop) den Inhalt von Seiten abrufst.

    Hallo,

    danke erstmal für die Info…

    OK, das Child Theme habe ich nach einem Tutorial erstellt, kann jemand dann erklären was für einen Code ich wo eintragen muss ?

    vielen Dank

    viele Grüße

    mz

    Ich denke das der Code hier herein müsste ?

    <?php
    /**
     * The front page template file
     *
     * If the user has selected a static page for their homepage, this is what will
     * appear.
     * Learn more: https://developer.wordpress.org/themes/basics/template-hierarchy/
     *
     * @package WordPress
     * @subpackage Twenty_Seventeen
     * @since 1.0
     * @version 1.0
     */
    
    get_header(); ?>
    
    <div id="primary" class="content-area">
    	<main id="main" class="site-main" role="main">
    
    		<?php
    		// Show the selected front page content.
    		if ( have_posts() ) :
    			while ( have_posts() ) :
    				the_post();
    				get_template_part( 'template-parts/page/content', 'front-page' );
    			endwhile;
    		else :
    			get_template_part( 'template-parts/post/content', 'none' );
    		endif;
    		?>
    
    		<?php
    		// Get each of our panels and show the post data.
    		if ( 0 !== twentyseventeen_panel_count() || is_customize_preview() ) : // If we have pages to show.
    
    			/**
    			 * Filter number of front page sections in Twenty Seventeen.
    			 *
    			 * @since Twenty Seventeen 1.0
    			 *
    			 * @param int $num_sections Number of front page sections.
    			 */
    			$num_sections = apply_filters( 'twentyseventeen_front_page_sections', 4 );
    			global $twentyseventeencounter;
    
    			// Create a setting and control for each of the sections available in the theme.
    			for ( $i = 1; $i < ( 1 + $num_sections ); $i++ ) {
    				$twentyseventeencounter = $i;
    				twentyseventeen_front_page_section( null, $i );
    			}
    
    	endif; // The if ( 0 !== twentyseventeen_panel_count() ) ends here.
    		?>
    
    	</main><!-- #main -->
    </div><!-- #primary -->
    
    <?php
    get_footer();
    

    Aber was muss geändert werden… steh leider am Schlauch 🙁

    Damit sollte es zu machen sein: https://de.wordpress.org/plugins/posts-in-page/

    Damit sollte es zu machen sein: https://de.wordpress.org/plugins/posts-in-page/

    Muss ich da jeden Post angeben der angezeigt werden soll, oder werden alle Blogeinträge angezeigt, und ich kann die komfortablen Sachen wie anpinnen benutzen ?

    viele Grüße

    Ok, hab es probiert, leider kommt da auch nur die Überschrift u.s.w., kein Inhalt mit Bildern…

    viele Grüße

    Moderator Bego Mario Garde

    (@pixolin)

    Du bekommst Themes so, wie sie sind, kannst sie nutzen oder nicht, kannst Einstellungen vornehmen und kannst sie auch verändern, wobei du für individuelle Anpassungen ein paar Grundkenntnisse in PHP, HTML, CSS und JavaScript haben solltest. Oft helfen Tutorials rasch weiter, um auch mit geringen Kenntnissen Änderungen vorzunehmen. Sinn unseres Forums ist eigentlich nicht, solche Tutorials zu schreiben, aber weil du so nett gefragt hast …

    Nehmen wir also an, du möchtest auf deiner Startseite mit Theme Twenty Seventeen einen kurzen Begrüßungstext oberhalb der Beiträge anzeigen:

    Hallo
    Ich begrüße dich herzlich auf meiner Website.
    Und hier sind meine Beiträge:

    (der Text kann natürlich beliebige lang sein, Formatierungen und Bilder enthalten. Ich beschränke mich hier auf wenige Zeilen.)

    Unter diesem Begrüßungstext möchtest du die Beiträge aufführen. Dazu gibst du im Customizer unter Startseiten-Einstellungen an, dass die Startseite deine Beiträge anzeigt. Das tut sie dann auch, nur eben vorerst ohne die Begrüßung.

    Um das zu ändern, erstellst du ein Child Theme und aktivierst es im Menü Design. Da die Änderungen im Customizer bezogen auf das Theme abgespeichert werden, musst du eventuell deine Theme-Anpassungen erneut vornehmen. Das Child-Theme besteht aus einem Styleshee style.css, das bis auf den Theme-Header leer ist. Die functions.php lädt sowohl das Stylesheet des Parent Theme als auch das Stylesheet des Child Theme, sonst nichts. Weitere Templates gibt es erst einmal nicht. (Falls das bei dir anders aussieht, lies nochmal ein aktuelles Tutorial zur Erstellung von Child Themes.)

    Nun versuchst du mit einem Plugin, z.B. Query Monitor, herauszufinden, welches Template für die Darstellung der Startseite verwendet wird. In der Admin-Leiste zeigt Query Monitor an, dass twentyseventeen/index.php verwendet wird. Da du in diesem Template dauerhaft Änderungen vornehmen möchtest, die nicht beim nächsten Update überschrieben werden, kopierst du diese Datei in dein Child-Theme-Verzeichnis, öffnest sie in einem brauchbaren Programmier-Editor und gibst gleich unter get_header() (so ab Zeile 19) erst einmal ein fröhliches <h1>Helllo Dolly!</h1> ein. (Die dreifache Eingabe des „l“ ist kein Tippfehler und auch kein willkürlicher Scherz, sondern soll dir helfen, in den Entwickler-Tools oder im Editor nach diesem Text-String zu suchen – „Helllo“ kommt nicht so häufig vor.)

    Wird das im Frontend korrekt ausgegeben, weißt du, dass

    • Dein Child-Theme aktiv ist und funktioniert.
    • Du das richtige Template ausgewählt hast.
    • Du an der richtigen Stelle Code eingegeben hast.

    Soweit schon mal cool.

    Allerdings ist „index.php“ ein Fallback-Template, das von WordPress immer verwendet wird, wenn es kein passenderes Template gibt. Damit deine Begrüßung später nicht an anderen Stellen ungewollt vorkommt, packst du sie in ein if-Statement:

    <?php
    if ( is_home() && is_front_page() ) {
    	echo '<h1>Helllo Dolly!</h1>';
    }
    ?>

    (heißt „auf Deutsch“: wenn das die Beitragsübersichtsseite ist und du außerdem auch noch auf der Startseite bist, dann … Halllo, Dolly!)

    Prima, nun erscheint ausschließlich auf der Startseite der Text-String Helllo Dolly! über den Beiträgen. Nun könntest du diesen Text durch einen anständigen Begrüßungstext ersetzen — fertig. Allerdings würde es dem Sinn eines CMS widersprechen, die Begrüßung als festen Bestandteil („hardcoded“) einzufügen und damit spätere Änderungen über das Backend auszuschließen. Also müssen wir noch ein bisschen mehr tun …

    Du erstellst erst einmal eine neue Seite, Titel „Hallo“ und Text

    „Ich begrüße dich herzlich auf meiner Website.
    Und hier sind meine Beiträge:

    Die Seite wird gespeichert und erhält dabei eine Datenbank-ID, die du in der Adressleiste deines Browsers auslesen kannst:

    https ://example.com/wp-admin/post.php?post=42&action=edit…

    Jetzt rufen wir diesen Beitrag im Template ab. Das machen wir mir
    $begruessung = get_post( 42 );

    (Eleganter wäre, die Seite anhand ihres Namens aufzurufen. Dann könnte ein Benutzer die Seite später auch löschen und eine neue Seite mit dem gleichen Namen anlegen. Aber wir wollen das Beispiel einfach halten.)

    Die Variable $begruessung enthält jetzt ein assoziatives Array mit allen möglichen Daten der Seite:

    • Wann erstellt,
    • von wem,
    • mit welchem Titel,
    • welchem Inhalt,

    Wir möchten gerne Titel und Inhalt ausgeben, wobei der Inhalt so hübsche Absatzabstände haben soll, wenn du Zeilenumbrüche eingegeben hast.
    Aber der Reihe nach:

    Was das assoziative Array des Beitrags alles enthält, kannst du in der Developer Reference nachlesen. Um das ein wenig abzukürzen:

    Den Titel erhältst du mit $ueberschrift = $begruessung->post_title;,
    den Inhalt mit $inhalt = $begruessung->post_content;.

    Damit der Inhalt richtig umgebrochen wird, benötigen wir zusätzlich einen Filter
    $inhalt = apply_filters( 'the_content', $begruessung->post_content );

    Zusammen ergibt das dann:

    <?php
    if ( is_home() && is_front_page() ) {
    
    $begruessung = get_post( 42 );
    
    $ueberschrift = $begruessung->post_title;
    $inhalt = apply_filters( 'the_content', $begruessung->post_content );
    
    }
    ?>

    Solltest du dich jetzt darüber wundern, dass noch nichts angezeigt wird: wir haben Titel und Inhalt bisher nur in Variablen geschrieben, müssen sie aber noch ausgeben. Dazu ist es aber sinnvoll, rasch ein einem Template nachzuschauen, ob das Theme für die Ausgabe von Titel und Inhalt irgendwelche CSS-Klassen verwendet. Dazu werfen wir rasch einen Blick in das Template template-parts/page/content-front-page.php im Parent Theme und finden in Zeile 31 die Formatierung des Titels, die wir (mit einem zusätzlichen <div class="wrap"></div>) direkt in unseren Code übernehmen:

    <?php
    if ( is_home() && is_front_page() ) {
    
    $begruessung = get_post( 42 );
    
    $ueberschrift = $begruessung->post_title;
    $inhalt = apply_filters( 'the_content', $begruessung->post_content );
    
    echo '<div class="wrap">'
    echo '<h2 class="entry-title">' . $ueberschrift . '</h2>';
    echo '<div class="entry-content">' . $inhalt . '</div>';
    echo '</div>;
    }
    ?>

    Das sieht schon sehr schick aus, aber dir wird bald auffallen, dass die Begrüßung auch auf Folgeseiten erscheint, wenn sich deine Beiträge über mehrere Seiten erstrecken. Das bekommen wir mit einem letzten Feinschliff in der ersten Zeile des if-Statements hin:

    <?php
    if ( is_home() && is_front_page() && ! is_paged() ) {
    
    $begruessung = get_post( 42 );
    
    $ueberschrift = $begruessung->post_title;
    $inhalt = apply_filters( 'the_content', $begruessung->post_content );
    
    echo '<div class="wrap">'
    echo '<h2 class="entry-title">' . $ueberschrift . '</h2>';
    echo '<div class="entry-content">' . $inhalt . '</div>';
    echo '</div>;
    }
    ?>

    Und das war’s dann auch schon. Ein paar Zeilen Code, eine Viertelstunde Bastelarbeit am Computer – jetzt weißt du, wie’s geht. 🙂

    Autor nach Diktat verreist.

    Du kannst auch mal https://de.wordpress.org/plugins/wp-show-posts/ ausprobieren

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