Pot să atribui un șablon unui tip de postare personalizat?

21 iul. 2011, 18:38:50
Vizualizări: 186K
Voturi: 62

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.

1
Comentarii

http://www.wpbeginner.com/wp-themes/create-custom-single-post-templates-for-specific-posts-or-sections-in-wordpress/ (acesta este pentru articole, dar îl poți modifica pentru CPT-uri) http://www.nathanrice.net/blog/wordpress-single-post-templates/ (acesta este pentru articole, dar îl poți modifica pentru CPT-uri) Este o idee bună pentru un plugin de fapt.

Wyck Wyck
22 iul. 2011 04:43:23
Toate răspunsurile la întrebare 8
3
96

Î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/

23 apr. 2017 13:06:08
Comentarii

Perfect! Nu știam asta!

Tiago Tiago
8 dec. 2020 16:44:05

Presupun că acest lucru nu se aplică la teme/șabloane de tip block?

Flimm Flimm
15 iul. 2022 21:05:45

Există vreun link către această tehnică în codex-ul WordPress?

klewis klewis
15 aug. 2022 15:49:06
4
37

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ă.

21 iul. 2011 18:44:39
Comentarii

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.

Odyss3us Odyss3us
21 iul. 2011 20:05:29

Î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?

mike23 mike23
22 iul. 2011 13:03:37

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

Simon East Simon East
12 sept. 2017 03:34:52

Nu este depășit. Încă funcționează perfect și rămâne o practică standard.

Tim Hallman Tim Hallman
1 mar. 2020 23:45:07
0
12

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ă.

11 iun. 2015 22:12:48
0

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.

8 mar. 2017 17:42:13
0

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
14 iul. 2016 00:59:40
0

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;?>
7 iun. 2019 19:22:11
0

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>
13 iul. 2015 11:06:22
0
-3

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

1 apr. 2016 16:59:23