Antworten auf deine Fragen:
Neues Thema erstellen

WordPress Template Einzelner Artikel statt Collection auf Startseite

rakader

Watmahatdahatma

Wir haben uns ein Parallax-Theme mit der Aesop-Story-Engine und den Novella-Theme gekauft. Dieses Theme stellt alle Artikel auf der Startseite auszugsweise untereinander. Nun wollen wir einen einzelnen Artikel als Startseite definieren und kommen nicht weiter.

Im entsprechenden PHP-File heißt es:
Code:
<?php
     get_header();
    ?><main class="novella-story-collection">
        <div class="novella-collection-grid clearfix">
            <?php
            if ( have_posts() ) :
                while ( have_posts() ) : the_post();
                    get_template_part( 'content/archive-post' );
                endwhile;
            else :
                get_template_part( 'content', 'none' );
            endif;
            ?>
        </div>
    </main>
<?php get_footer(); ?>

Wenn ich es richtig verstehe: content/archive-post greift auf alle in der DB gespeicherten Artikel zu. Dort sieht es so aus:

Code:
<?php

$img             = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'novella-archive-cover');
$category         = get_the_category(get_the_ID());
$story_accent     = get_post_meta( get_the_ID(), 'novella_story_accent_color', true ) ? get_post_meta( get_the_ID(), 'novella_story_accent_color', true ) : get_theme_mod('novella_accent_color');
$styles         = $story_accent ? sprintf('style="background:%s;"', $story_accent ) : null;
$thumb             = has_post_thumbnail() ? 'has-thumbnail' : 'no-thumbnail';
?>
<article id="post-<?php the_ID(); ?>" <?php post_class( array('class' => 'novella-collection-item '.$thumb)); ?> style="background-image:url(<?php echo $img[0];?>);background-size:cover;background-position:center center;">
    <a class="novella-archive-entry-inner" href="<?php echo the_permalink();?>">
        <div>
            <span class="novella-entry-category"><?php echo $category ? $category[0]->cat_name : null;?></span>
            <?php echo the_title('<h2 class="novella-entry-title">','</h2>');?>
            <span class="novella-entry-author"><span><?php echo apply_filters('novella_story_by', _e('by','novella'));?></span> <?php the_author();?></span>
        </div>
    </a>
    <?php if ( has_post_thumbnail() ) { ?>
        <div class="novella-archive-entry-mask" <?php echo $styles;?>></div>
    <?php } ?>
</article>

Frage ist nunmehr: Wie und wo ändern wir den Code ab, damit z.B. ein bestimmter Artikel oder der neueste Artikel auf der Startseite ausgegeben wird?

Nach acht Stunden Experimenten sind wir leider keinen Schritt weiter und hoffen nun auf die Hilfe des Forums.
Vielen Dank vorab!
 
Zuletzt bearbeitet:

lachender_engel

Aktives Mitglied

Hallo Radulph.
Dein Ansatz muss liegen im sogenannten Loop. Der Loop beinhaltet alle Posts und arbeitet dieses nacheinander ab. Du findest in hier:
PHP:
if ( have_posts() ) :
  while ( have_posts() ) : the_post();
    get_template_part( 'content/archive-post' );
  endwhile;
else :
  get_template_part( 'content', 'none' );
endif;
Jetzt hast Du zwei Möglichkeiten den Filter auf Deine gewünschten Parameter zu setzen.
Zum Einen erweiterst Du die SQL-Query der Abfrage für den Loop oder Du filterst nach Parametern in der Query.
Mein Vorschlag ist es zum Beispiel so zu filtern:
PHP:
$my_query = new WP_Query( $args );
if ($my_query->have_posts() ) :
  while ( $my_query->have_posts() ) : $my_query->the_post();
    get_template_part( 'content/archive-post' );
  endwhile;
else :
  get_template_part( 'content', 'none' );
endif;
// Reset Post Data
wp_reset_postdata();
Deinen FIlter setzt Du im Array §args. $args kann eine Vielzahl Parameter haben. EIne Liste derer findest Du im Wordpress Codex.

Einen anderen Weg gehst Du in dem Du festlegst wann get_template_part aufgerufen wird. Zum Beispiel so:
PHP:
if ( have_posts() ) :
  while ( have_posts() ) : the_post();
    if (get_the_author()=='Radulph') get_template_part( 'content/archive-post' );
  endwhile;
else :
  get_template_part( 'content', 'none' );
endif;
In diesem Beispiel wird get_template_part nur dann aufgerufen wenn der Autor Radulph heißt.
Beide Wege führen nach Rom ;-) Aus meiner Sicht ist der erste Weg jedoch besser, da er nur wirklich die Beiträge im Loop zurück liefert, die Du willst.
Der zweiter Vorschlag durchläuft alle Beiträge. Wenn Du jetzt 13.723 Beiträge hast aber nur einen ausgeben willst, dann durchläuft sich die Schleife dennnoch 13.723 mal. Das braucht unnötig Zeit.
 
Zuletzt bearbeitet:
N

Noob2000

Guest

1000 Dank für Deine Mühen lachender_engel!!! :daumenhoch

Hat wunderbar funktioniert.

Vielen Dank auch im Namen von rakader.

Liebe Grüße
 

lachender_engel

Aktives Mitglied

Schön, wenn ich helfen konnte.
Eins noch: Hier im Forum kannst Du einen Beitrag auf "erledigt" sethen, wenn er erledigt ist ;-)
Das machst Du in dem Du auf bearbeiten klickst und vor dem Titel den Präfix entsprechend setzt. Wäre toll, wenn Du @rakader das noch machst.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.614
Beiträge
1.538.351
Mitglieder
67.525
Neuestes Mitglied
mgtaucher
Oben