Pot să atribui un șablon unui tip de postare personalizat?
Pot să atribui un fișier șablon unui tip de postare personalizat?
Am creat un tip de postare personalizat numit items
și aș dori să atribui șabloane pentru items așa cum se poate face cu paginile.

Începând cu WordPress versiunea 4.7, acum poți atribui șabloane personalizate de pagini și altor tipuri de postări, nu doar paginilor.
Pentru a realiza acest lucru, pe lângă antetul de fișier Template Name, tipurile de postări acceptate de un șablon pot fi specificate folosind Template Post Type:, după cum urmează.
<?php
/*
Template Name: Layout pagină pe toată lățimea
Template Post Type: post, page, product
*/
Puteți obține mai multe informații despre acest subiect pe următoarele pagini.
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/

Puteți crea șabloane pentru tipurile personalizate de postări prin crearea de fișiere, de exemplu:
single-mycustomposttype.php
Consultați Ierarhia șabloanelor în codex.
PS: această întrebare a fost deja răspunsă.

Mulțumesc pentru asta, dar ceea ce aș dori să știu este dacă este posibil să adaug șabloane personalizate la tipurile de postări personalizate. De exemplu, pot crea două șabloane și să atribui fiecare șablon postării respective? Din câte înțeleg, această metodă permite specificarea unui singur fișier de șablon pentru gestionarea acelui tip specific de postare.

Înțeleg, dacă ai nevoie de șabloane diferite pentru postările individuale, poți crea mai multe tipuri de postări personalizate, în funcție de fiecare șablon necesar. Presupun că depinde de câte șabloane diferite ai nevoie. Ce intenționezi să faci în șabloane care trebuie să fie diferit la fiecare postare?

Acest răspuns este acum depășit. Consultă răspunsul lui Vinod Dalvi.

Iată ce funcționează pentru mine:
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;
});
Astfel, pentru un post de tipul personalizat foobar
și un slug hello-world
, codul de mai sus ar încărca șablonul single-foobar-hello-world.php
, dacă acesta există.

Pentru cei care ajung la acest thread prin intermediul Google, WP 4.7 a introdus șabloane pentru toate tipurile de postări. Consultați Make WP Core pentru un ghid complet. Nu mai sunteți limitați la un singur șablon pentru toate CPT-urile dumneavoastră, puteți atribui șabloane individuale post cu post exact cum puteți face cu Paginile.

Acesta este un pic învechit, dar poți încerca și această metodă:
Creează un șablon pentru tipul de post personalizat:
single-*custom-post-type-slug*.php
Fișierul ar trebui să verifice slug-ul și să confirme dacă există un fișier corespunzător, iar dacă nu, să folosească un șablon implicit:
<?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 );
?>
Înlocuiește toate instanțele de custom-post-type-slug cu slug-ul real al tipului tău de post personalizat.
Eu fac asta pentru ușurință și scopuri organizatorice. Mi se pare mai curat decât să am toate fișierele în folderul rădăcină al temei.
exemplu de structură de foldere:
themeroot
| |single-cases.php
|-templates
| --cases
| |default.php
| |case-one.php
| |case-two.php

Este foarte simplu de făcut.
Crează un nou fișier PHP în directorul rădăcină al temei tale și adaugă acest cod în partea de sus:
<?php /*
* Template Name: Vizualizarea mea personalizată
* Template Post Type: Post_typename // aici trebuie să adaugi numele tipului tău de postare personalizată
*/ ?>
Exemplul complet va arăta astfel:
<?php /*
* Template Name: Vizualizarea mea personalizată
* Template Post Type: Post_typename // aici trebuie să adaugi numele tipului tău de postare personalizată
*/ ?>
<?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" alt="Miniatura postării" title="Miniatura postării">
<?php endif;?>

Mai întâi creează o pagină numită Articole sau cum dorești, care să afișeze conținutul din postările de tip items, apoi creează un fișier de șablon ca cel de mai jos și numește-l template-items. Selectează acel șablon pentru pagina pe care ai creat-o.
<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>

Am găsit o altă soluție folosind pluginul pentru șabloane personalizate de postări
