it-swarm.com.de

Kann ich einem benutzerdefinierten Beitragstyp eine Vorlage zuweisen?

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.

31
Odyss3us

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/

45
Vinod Dalvi

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.

20
mike23

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.

8
Chris Carson

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.

4
WebElaine

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>
1
clap

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