Kann ich einem benutzerdefinierten Beitragstyp eine Vorlagendatei zuweisen?
Ich habe einen benutzerdefinierten Beitragstyp mit dem Namen erstellt items
und möchte den Elementen Vorlagen zuweisen, wie Sie es mit Seiten tun können.
Kann ich einem benutzerdefinierten Beitragstyp eine Vorlagendatei zuweisen?
Ich habe einen benutzerdefinierten Beitragstyp mit dem Namen erstellt items
und möchte den Elementen Vorlagen zuweisen, wie Sie es mit Seiten tun können.
Antworten:
Ab WordPress-Version 4.7 können Sie jetzt benutzerdefinierte Seitenvorlagen zusammen mit der Seite 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-types https://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 : das wurde schon 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;
});
Wenn Sie also einen Beitrag vom Typ "Benutzerdefinierter Beitrag" foobar
und einen Teil hello-world
des obigen Codes angeben, wird die single-foobar-hello-world.php
Vorlage geladen , sofern sie vorhanden ist.
Für diejenigen, die diesen Thread über Google erreichen, hat WP 4.7 Vorlagen für alle Beitragstypen eingeführt. Eine vollständige exemplarische Vorgehensweise finden Sie unter Erstellen von WP Core . 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.
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 Fehler überprü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 des benutzerdefinierten Post-Type-Slugs durch den tatsächlichen Slug Ihres benutzerdefinierten Post-Type.
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
Erstellen Sie zunächst 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" (siehe unten). 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 sehr einfach zu bewerkstelligen.
Erstellen Sie eine neue PHP-Datei in Ihrem Theme-Stammverzeichnis und fügen Sie diese oben hinzu:
<?php /*
* Template Name: My custom view
* Template Post Type: Post_typename // here you need to add the name of your custom post type
*/ ?>
Das vollständige Beispiel lautet wie folgt:
<?php /*
* Template Name: My custom view
* Template Post Type: Post_typename // here you need to add the name of your custom post type
*/ ?>
<?php get_header();?>
<div class="container pt-5 pb-5">
<?php if (has_post_thumbnail()):?>
<img src="<?php the_post_thumbnail_url('largest');?>" class="img-fluid">
<?php endif;?>
<?php if (have_posts()) : while (have_posts()) : the_post();?>
<?php the_content();?>
<?php endwhile; endif;?>
</div>
<?php get_footer();?>
Wir haben eine andere Lösung mit dem benutzerdefinierten Post-Template-Plugin erarbeitet