Wie erstelle ich Seitenvorlagen zum Anzeigen von Blogeinträgen in verschiedenen Layouts?

Ich erstelle ein WordPress-Theme und möchte einige Seitenvorlagen erstellen, um Blog-Seiten mit verschiedenen Layouts zu erstellen. Zum Beispiel möchte ich blog-4-column.php, blog-3column.php und blog-list.php haben, um dem Benutzer 3 verschiedene Layout-Optionen für eine Blog-Seite zu geben. Jetzt kann ich Blog-Posts in meiner index.php-Datei mit diesem Code auflisten:

if (have_posts()) : while(have_posts()) : the_post(); ?>   <div id="post-" > 

No Posts found

<?php endif;

Wo ich content.php, content-link.php, content-gallery.php habe, um Beiträge von verschiedenen Post-Formaten anzuzeigen. Jetzt ist der einzige Weg, wie ich das in einer Seitenvorlage machen kann, WP_Query zu verwenden, da der Post-Typ in der Seitenvorlage “pages” ist und der obige Code die registrierten Seiten und nicht die Posts auflistet.

Ich möchte nur wissen, ob es überhaupt möglich ist, die gleichen ‘content- post- format’ Dateien dafür zu verwenden, da ich nicht 3 oder 4′ content- post- format’ Dateien für jedes einzelne Blog Page Template erstellen möchte das würde ich erschaffen.

Ich habe nach etwas gesuchtem gesucht, und eines, das ich am nützlichsten fand, war Tutssplus , aber es enthält immer noch nicht verschiedene ‘content- post- format’ Dateien und auch nur wenige verschiedene Page Templates zum Auflisten von Blogposts auf verschiedene Arten.

Bitte lass es mich wissen und danke.

Solutions Collecting From Web of "Wie erstelle ich Seitenvorlagen zum Anzeigen von Blogeinträgen in verschiedenen Layouts?"

Ich würde keine benutzerdefinierten Seitenvorlagen verwenden, um das Layout des Blogpost-Indexes zu ändern. Die Verwendung von Seitenvorlagen für den Blogpost-Index umgeht die home.php für die Anzeige des Blogpost-Indexes (der in der Vorlagenhierarchie entweder home.php oder index.php zum Rendern verwendet).

Bearbeiten

Ich habe nie … gesagt, dass ich das Layout des Blogpost-Indexes in meiner Frage ändern möchte.

Ja, genau davon sprichst du. In der WordPress-Nomenklatur ist der Blog-Posts-Index die Standard-Liste aller Blog-Posts, egal ob auf der Startseite oder einer statischen Seite. Wenn Sie Settings -> Reading -> Front Page Displays als a static page konfigurieren und dann der Seite ” Posts page eine statische Seite zuweisen, verwendet WordPress diese zugewiesene statische Seite, um den Blogpost-Index anzuzeigen.

Wenn WordPress diese Seite verwendet, um den Blogpost-Index anzuzeigen, ignoriert es alle zugewiesenen Seitenvorlagen. Es ignoriert die Vorlage page.php . Es verwendet immer und nur entweder home.php oder index.php .

Wenn Sie den Benutzer zwingen, eine benutzerdefinierte Seitenvorlage zum Anzeigen des Blogpost-Index zu verwenden, brechen Sie damit die functionsweise der corefunktionalität. Damit Benutzer Ihre benutzerdefinierten Seitenvorlagen verwenden können, müssen sie eine weitere statische Seite erstellen und dann Ihre benutzerdefinierte Seitenvorlage dieser Seite zuweisen. Die Benutzer müssen entweder die Seite, die der Seite ” Posts page zugewiesen wurde, unter Settings -> Reading oder sie ignorieren einfach, dass die Seite vorhanden ist, und duplizieren ihre Ausgabe auf der separaten statischen Seite, der sie Ihre benutzerdefinierte Seitenvorlage zugewiesen haben.

Ursprüngliche Lösung

Definieren Sie stattdessen eine Theme-Option für das Blog-Layout, verwenden Sie dann diesen Optionswert, um Template-Part-Dateien bedingt einzuschließen, Seitenleisten bedingungsabhängig anzuzeigen oder body_class (oder post_class ) für CSS-Änderungen zu filtern.

Bedingte Vorlage-Teildateien

 $theme_options = get_option( $option_name ); get_template_part( 'content', $theme_options['blog_layout'] ); 

Bedingte Seitenleisten

 $theme_options = get_option( $option_name ); if ( 'full' != $theme_options['blog_layout'] ) { get_sidebar(); } 

Filter body_class

 function wpse141248_filter_body_class( $classes ) { if ( is_home() ) { $theme_options = get_option( $option_name ); $classes[] = 'layout-' . $theme_options['blog_layout']; } return $classes; } add_filter( 'body_class', 'wpse141248_filter_body_class' ); 

Das Filtern von post_class wäre im Wesentlichen die gleiche Technik.