Kann ich einem benutzerdefinierten Beitragstyp eine Vorlage zuweisen?

35

Kann ich einem benutzerdefinierten Beitragstyp eine Vorlagendatei zuweisen?

Ich habe einen benutzerdefinierten Beitragstyp mit dem Namen erstellt itemsund möchte den Elementen Vorlagen zuweisen, wie Sie es mit Seiten tun können.

Odyss3us
quelle
wpbeginner.com/wp-themes/… (Dies ist für Posts, aber Sie können es für CPTs ändern.) nathanrice.net/blog/wordpress-single-post-templates (Dies ist für Posts, aber Sie können es für CPTs ändern.) Es ist a gute idee für ein plugin eigentlich.
Wyck

Antworten:

50

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 /

Vinod Dalvi
quelle
21

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.

mike23
quelle
2
Vielen Dank dafür, aber ich würde gerne wissen, ob es möglich ist, benutzerdefinierte Vorlagen zu benutzerdefinierten Beitragstypen hinzuzufügen. Kann ich zum Beispiel zwei Vorlagen erstellen und jeder Vorlage den entsprechenden Beitrag zuweisen? Das erlaubt nur die Angabe einer Vorlagendatei, um diesen spezifischen Beitragstyp zu behandeln, soweit ich es verstehe.
Odyss3us
Wenn Sie unterschiedliche Vorlagen für einzelne Beiträge benötigen, möchten Sie möglicherweise mehrere benutzerdefinierte Beitragstypen für die einzelnen benötigten Vorlagen erstellen. Ich denke, das hängt davon ab, wie viele verschiedene Vorlagen Sie benötigen. Was werden Sie in den Vorlagen tun, die für jeden Beitrag unterschiedlich sein müssen?
mike23
Diese Antwort ist nicht mehr aktuell. Siehe die Antwort von Vinod Dalvi.
Simon East
8

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" foobarund einen Teil hello-worlddes obigen Codes angeben, wird die single-foobar-hello-world.phpVorlage geladen , sofern sie vorhanden ist.

Chris Carson
quelle
4

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.

WebElaine
quelle
2

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
eballeste
quelle
1

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>
klatschen
quelle
1

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();?>
jerryurenaa
quelle