WordPress Post Object nutzen (HowTo): Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „= Allgemeines = TBD = Vorangegangene(r) Prozess(e) = TBD via Link zu anderem HowTo = Arbeitsschritte (Initialer Prozess bei einfachen Templates) = == Schr…“) |
(→FAQ) |
||
| Zeile 305: | Zeile 305: | ||
<?php echo get_the_permalink(); ?> | <?php echo get_the_permalink(); ?> | ||
</pre> | </pre> | ||
= Weitere Funktionen und Optionen auf Basis der Post Object Attribute = | |||
== [post_status] == | |||
* https://developer.wordpress.org/reference/functions/get_post_status/ | |||
* get_post_status() liefert zurück | |||
** publish | |||
** future??? | |||
** draft | |||
** pending | |||
** private | |||
<syntaxhighlight lang=php> | |||
<?php | |||
if ( get_post_status ( $ID ) == 'private' ) { | |||
echo 'private'; | |||
} else { | |||
echo 'public'; | |||
} | |||
?> | |||
</syntaxhighlight> | |||
= FAQ = | = FAQ = | ||
Aktuelle Version vom 10. März 2022, 09:36 Uhr
Allgemeines[Bearbeiten]
TBD
Vorangegangene(r) Prozess(e)[Bearbeiten]
TBD via Link zu anderem HowTo
Arbeitsschritte (Initialer Prozess bei einfachen Templates)[Bearbeiten]
Schritt 1: Template für Einzelansicht anlegen[Bearbeiten]
- 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(); ?>
[Bearbeiten]
- 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[Bearbeiten]
- 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)[Bearbeiten]
Beiträge nach Kriterien anzeigen[Bearbeiten]
Allgemein[Bearbeiten]
- 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[Bearbeiten]
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[Bearbeiten]
https://wordpress.org/support/article/post-status/
Anzeige nach Status ('post_status') kann sein:
- 'post_status' => 'publish' (veröffentlichte Beiträge)
- '???' -> ???
nach Kategorie[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
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[Bearbeiten]
Einfachste Variante
<?php the_excerpt(); ?>
Permalink des Beitrags auslesen und einbinden[Bearbeiten]
Einfachste Variante
<?php echo get_the_permalink(); ?>
Weitere Funktionen und Optionen auf Basis der Post Object Attribute[Bearbeiten]
[post_status][Bearbeiten]
- https://developer.wordpress.org/reference/functions/get_post_status/
- get_post_status() liefert zurück
- publish
- future???
- draft
- pending
- private
<?php
if ( get_post_status ( $ID ) == 'private' ) {
echo 'private';
} else {
echo 'public';
}
?>
FAQ[Bearbeiten]
Welche Attribute des Post Object können ausgelesen werden?[Bearbeiten]
[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[Bearbeiten]
Lösung 1[Bearbeiten]
TBD
Nachfolgende(r) Prozess(e)[Bearbeiten]
TBD via Verlinkung zu anderem(n) HowTo(s)
Quellen[Bearbeiten]
- TBD