Kann ich einem benutzerdefinierten Beitragstyp eine Vorlagendatei zuweisen?
Ich habe einen benutzerdefinierten Beitragstyp mit dem Namen items
erstellt und möchte den Elementen Vorlagen zuweisen, wie Sie dies mit Seiten tun können.
Ab WordPress Version 4.7 können Sie nun zusammen mit der Seite benutzerdefinierte Seitenvorlagen anderen Beitragstypen zuweisen.
Um dies zusätzlich zum Header der Vorlagennamen-Datei zu erreichen, können die von einer Vorlage unterstützten Beitragstypen unter Verwendung von Vorlagenbeitragstyp wie folgt angegeben werden.
<?php
/*
Template Name: Full-width page layout
Template Post Type: post, page, product
*/
Weitere Informationen dazu erhalten Sie auf den folgenden Seiten.
https://wptavern.com/wordpress-4-7-brings-custom-page-template-functionality-to-all-post-typeshttps://make.wordpress.org/core/2016/11/03/post-type-templates-in-4-7/
Sie können eine Vorlage für benutzerdefinierte Beitragstypen erstellen, indem Sie Dateien erstellen. Beispiel:
single-mycustomposttype.php
Siehe Vorlagenhierarchie im Codex.
PS: dies wurde bereits beantwortet.
Folgendes funktioniert bei mir:
add_filter('single_template', function($original){
global $post;
$post_name = $post->post_name;
$post_type = $post->post_type;
$base_name = 'single-' . $post_type . '-' . $post_name . '.php';
$template = locate_template($base_name);
if ($template && ! empty($template)) return $template;
return $original;
});
Aus diesem Grund würde bei einem Beitrag vom benutzerdefinierten Beitragstyp foobar
und einer Menge von hello-world
der obige Code die Vorlage single-foobar-hello-world.php
laden, falls vorhanden.
Für diejenigen, die diesen Thread über Google erreichen, wurden in WP 4.7 Vorlagen für alle Beitragstypen eingeführt. Siehe Make WP Core für eine vollständige exemplarische Vorgehensweise. Sie sind nicht mehr auf eine Vorlage für alle Ihre CPT beschränkt, Sie können einzelne Vorlagen wie bei Pages post für post zuweisen.
Erstellen Sie zuerst auf einer Seite mit dem Namen "Artikel" nach Ihren Wünschen, die den Inhalt der Artikelposttypen anzeigt, und erstellen Sie dann eine Vorlagendatei mit dem Namen "Vorlagenartikel". Wählen Sie diese Vorlage für die von Ihnen erstellte Seite aus.
<div class="container">
<div class="row">
<div class="col-md-9">
<div class="panel panel-default text-center">
<?php $loop = new WP_Query( array( 'post_type' => 'items', 'posts_per_page' => 5 ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
<?php the_title();?>
<?php if(has_post_thumbnail() ) { the_post_thumbnail(); } ?>
<?php the_content();?>
<?php endwhile; ?>
<?php wp_reset_query(); ?>
</div>
</div>
</div>
</div>
Dies ist ein bisschen alt, aber Sie können dies auch versuchen:
Erstellen Sie eine Vorlage für den benutzerdefinierten Beitragstyp:
single-*custom-post-type-slug*.php
Die Datei sollte den Slug prüfen und prüfen, ob eine Datei vorhanden ist. Andernfalls sollte auf eine Standardvorlagendatei zurückgegriffen werden:
<?php
$slug = get_post_field( 'post_name', get_post() );
$slug = ( locate_template( 'templates/*custom-post-type-slug*/' . $slug . '.php' ) ) ? $slug : 'default';
get_template_part( 'templates/*custom-post-type-slug*/' . $slug );
?>
Ersetzen Sie alle Instanzen von custom-post-type-slug durch den tatsächlichen Slug Ihres benutzerdefinierten Post-Typs.
Ich mache dies aus Gründen der Benutzerfreundlichkeit und Organisation. Es scheint mir sauberer zu sein, als alle Dateien im Stammordner des Themas zu haben.
beispiel für eine Ordnerstruktur:
themeroot
| |single-cases.php
|-templates
| --cases
| |default.php
| |case-one.php
| |case-two.php