WordPress Post Object nutzen (HowTo)

Aus wiki.sehanka.de
Version vom 10. März 2022, 09:25 Uhr von Sebastian.kalms (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „= Allgemeines = TBD = Vorangegangene(r) Prozess(e) = TBD via Link zu anderem HowTo = Arbeitsschritte (Initialer Prozess bei einfachen Templates) = == Schr…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Allgemeines

TBD

Vorangegangene(r) Prozess(e)

TBD via Link zu anderem HowTo

Arbeitsschritte (Initialer Prozess bei einfachen Templates)

Schritt 1: Template für Einzelansicht anlegen

  • das Template wird zur Ausgabe von einzelnen Beiträgen benötigt
  • die Einzel- bzw. Single-Ansicht wir im Root-Verzeichnis des Themes als single.php angelegt
  • die single.php wird dann automatisch durch WordPress geladen
<?php defined( 'ABSPATH' ) or die(); ?>

<?php # HEADER ?>

    <?php get_header(); ?>


<?php # TITLE ?>

    <main>

        <div class="">
            <h1><?php the_title(); ?></h1>
        </div>

<?php # CONTENT ?>

        <div class="">
            <div class=""></div>
            <?php while ( have_posts() ) : the_post(); ?>
                <div <?php echo post_class(); ?>>
                    <p>Erstellt von <?php echo get_the_author_meta( 'first_name' ); ?> <?php echo get_the_author_meta( 'last_name' ); ?> am <?php echo get_the_date($format = 'l, j. F Y'); ?></p>
                    <div><?php echo get_the_post_thumbnail(); ?></div>
                    <div><?php the_content(); ?></div>
                </div>
            <?php endwhile; ?>
        </div>
        <div class=""></div>

        <div><a href="../">Alle Beiträge</a></div>

    </main>


<?php # FOOTER ?>

    <?php get_footer(); ?>

Schritt 2: Template bzw. Partial für Teaseransicht anlegen

  • ist die Ansicht um die Teaser (z. B. Titel und Bild) einzelner Beiträge anzuzeigen
  • erfolgt nach bestimmten Regeln, da nicht alle angezeigt werden soll (z. B. die aktuellsten 3 Beiträge der Kategorie X)
  • entgegen der Detail- und Listenansicht (single.php und home.php) steht hierfür kein definiertes Template zur Verfügung
  • es muss das Post-Objekt bzw. die get_posts-Funktion (https://developer.wordpress.org/reference/functions/get_posts/) genutzt werden, um die Posts in einem Template oder Partial einzubinden

Beispiel: Daten der 3 Posts holen

<?php
$posts = get_posts([
    'post_type'         => 'post',
    'post_status'       => 'publish',
    'numberposts'       => 3,
    'orderby'           => 'date',
    'order'             => 'DESC',
]); ?>

Beispiel: 3 Post anzeigen

<?php foreach ($posts as $post): ?>
    <a href="<?php echo get_permalink($post->ID); ?>" class="post-teaser">
        <div class="img">
            <div class="ratio-container-16-9" style="background-image: url(<?php echo get_the_post_thumbnail_url($post->ID, 'medium'); ?>);"></div>
        </div>
        <div class="content">
            <span><?php echo the_author_meta( 'display_name' , $post->post_author ); ?></span>
            <span><?php echo get_the_date('d.m.Y', $post->ID); ?></span>
            <span><?php echo get_the_title($post->ID); ?></span>
            <span><?php echo get_the_excerpt($post->ID); ?></span>
        </div>
    </a>
<?php endforeach; ?>

Schritt 3: Template für Listenansicht anlegen

  • das Template wird zur Ausgabe einer Liste aller Beiträge genutzt
  • sie wird nicht immer gewünscht bzw. benötigt
  • die Listen- bzw. Archive-Ansicht wird im Root-Verzeichnis des Themes als home.php angelegt
  • die home.php wird dann automatisch durch WordPress geladen
<?php # HEADER ?>

    <?php get_header(); ?>


<?php # TITLE ?>

    <main>

        <div class="">
            <h1>Alle Beiträge</h1>
        </div>


<?php # CONTENT ?>

        <div class="">

            <div class="">
                <?php while ( have_posts() ) : the_post(); ?>
                    <div <?php echo post_class(); ?>>
                        <div>
                            <?php echo get_the_post_thumbnail(); ?>
                        </div>
                        <div>
                            <h2>
                                <a href="<?php echo get_the_permalink(); ?>">
                                    <?php the_title(); ?>
                                </a>
                            </h2>
                            <div class="">Erstellt am <?php echo get_the_date('d.m.Y'); ?></div>
                            <div><?php the_excerpt(); ?></div>
                        </div>
                    </div>
                <?php endwhile; ?>
            </div>

            <div class="">
                <?php echo previous_posts_link(); ?>
                <?php echo next_posts_link(); ?>
            </div>
        </div>

    </main>


<?php # FOOTER ?>

    <?php get_footer(); ?>

Weitere Arbeitsschritte (Erweiterter Prozess bei komplexeren Templates)

Beiträge nach Kriterien anzeigen

Allgemein

  • Anzeige erfolgt durch get_posts-Funktion und den darin festgelegten Kriterien
  • z.B. Typ, Status
<?php
$posts = get_posts([
    'post_type'         => 'post',
    'post_status'       => 'publish',
]); ?>

nach Typ

Anzeige nach Typ ('post_type') kann sein:

  • 'post_type' => 'post' (normale Beiträge)
  • 'post_type' => 'page' (??? geht das?)
  • 'post_type' => 'cpt-name' (Custom Post Type z. B: 'service')
  • weitere ?

nach Status

https://wordpress.org/support/article/post-status/

Anzeige nach Status ('post_status') kann sein:

  • 'post_status' => 'publish' (veröffentlichte Beiträge)
  • '???' -> ???

nach Kategorie

Anzeige nach Kategorie ('category') kann sein:

  • 'category' => 0 (zeigt Beiträge alle Kategorien)
  • 'category' => 5 (zeigt Beiträge mit der ID der Kategorie -> siehe URL)
  • 'category_name' => 'titelform' (zeigt Beiträge mit der Titelform der Kategorie -> siehe Kategorieverwaltung)

Beiträge sortieren

Sortierung erfolgt nach Kriterium, nach dem sortiert wird (orderby), und Sortierrichtung (order), nach der sortiert wird

<?php
$posts = get_posts([
    'orderby'           => 'date',
    'order'             => 'DESC',
]); ?>
  • 'order' kann sein:
    • 'ASC' -> aufsteigend
    • 'DESC' -> absteigend
  • 'orderby' kann sein:
    • 'rand' -> Zufall
    • 'date' -> Datum der Veröffentlichung
    • 'title' -> ??? geht das?

Beitragsbildes auslesen und einbinden

Einfachste Varianten

mit als kompletter HTML-Tag mit Metainformationen oder nur die URL

<?php echo get_the_post_thumbnail(); ?> // Image-Tag with Meta (Width, Height, Source, Alt, Sizes...)
<?php echo get_the_post_thumbnail_url(); ?> // Image-URL

Attribute des Beitragsbildes

<?php echo get_post_meta( get_post_thumbnail_id(), '_wp_attachment_image_alt', true ); ?> // Alt Text
<?php echo get_post(get_post_thumbnail_id())->post_title; ?> // Title
<?php echo get_post(get_post_thumbnail_id())->post_excerpt; ?> // Caption
<?php echo get_post(get_post_thumbnail_id())->post_content; ?> // Description

Datum des Beitrags auslesen und einbinden

Einfachste Variante

<?php echo get_the_date(); ?>

Datumsformat anpassen

Datums- und Zeitformate siehe: https://www.php.net/manual/de/function.date.php

<?php echo get_the_date($format = 'l, j. F Y'); ?>

Weitere Informationen siehe: https://developer.wordpress.org/reference/functions/get_the_date/

Autor des Beitrags auslesen und einbinden

Einfachste Variante

<?php echo get_the_author_meta( 'first_name' ); ?> <?php echo get_the_author_meta( 'last_name' ); ?>

Einbindung weiterer Attribute des Post Autors

admin_color
aim
comment_shortcuts
description
display_name
first_name
ID
jabber
last_name
nickname
plugins_last_view
plugins_per_page
rich_editing
syntax_highlighting
user_activation_key
user_description
user_email
user_firstname
user_lastname
user_level
user_login
user_nicename
user_pass
user_registered
user_status
user_url
yim

Weitere Informationen siehe: https://developer.wordpress.org/reference/functions/get_the_author_meta/

Zusammenfassung des Beitrags auslesen und einbinden

Einfachste Variante

<?php the_excerpt(); ?>

Permalink des Beitrags auslesen und einbinden

Einfachste Variante

<?php echo get_the_permalink(); ?>

FAQ

Welche Attribute des Post Object können ausgelesen werden?

   [ID] =>
   [post_author] =>
   [post_date] => 
   [post_date_gmt] => 
   [post_content] => 
   [post_title] => 
   [post_excerpt] => 
   [post_status] =>
   [comment_status] =>
   [ping_status] => 
   [post_password] => 
   [post_name] =>
   [to_ping] => 
   [pinged] => 
   [post_modified] => 
   [post_modified_gmt] =>
   [post_content_filtered] => 
   [post_parent] => 
   [guid] => 
   [menu_order] =>
   [post_type] =>
   [post_mime_type] => 
   [comment_count] =>
   [filter] =>

Troubleshooting

Lösung 1

TBD

Nachfolgende(r) Prozess(e)

TBD via Verlinkung zu anderem(n) HowTo(s)

Quellen

  • TBD