Posso assegnare un template a un tipo di post personalizzato?

21 lug 2011, 18:38:50
Visualizzazioni: 186K
Voti: 62

Posso assegnare un file template a un tipo di post personalizzato?

Ho creato un tipo di post personalizzato chiamato items e vorrei assegnare dei template agli elementi come si può fare con le pagine.

1
Commenti

http://www.wpbeginner.com/wp-themes/create-custom-single-post-templates-for-specific-posts-or-sections-in-wordpress/ (questo è per i post ma puoi modificarlo per CPT) http://www.nathanrice.net/blog/wordpress-single-post-templates/ (questo è per i post ma puoi modificarlo per CPT) Sarebbe davvero una buona idea per un plugin.

Wyck Wyck
22 lug 2011 04:43:23
Tutte le risposte alla domanda 8
3
96

A partire dalla versione 4.7 di WordPress, è ora possibile assegnare modelli di pagina personalizzati ad altri tipi di post oltre alle pagine.

Per ottenere questo risultato, oltre all'intestazione del file Template Name, i tipi di post supportati da un modello possono essere specificati utilizzando Template Post Type: come segue.

<?php
/*
Template Name: Layout a larghezza intera
Template Post Type: post, page, product
*/

Puoi ottenere maggiori informazioni su questa funzionalità nelle seguenti pagine.

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
Commenti

Perfetto! Non lo sapevo!

Tiago Tiago
8 dic 2020 16:44:05

Presumo che questo non si applichi ai temi/template a blocchi?

Flimm Flimm
15 lug 2022 21:05:45

C'è un link a questa tecnica nel codex di WordPress?

klewis klewis
15 ago 2022 15:49:06
4
37

Puoi creare un template per i custom post type creando dei file, ad esempio:

single-mycustomposttype.php

Consulta la Gerarchia dei Template nel codex.

PS: questa domanda è già stata risposta in precedenza.

21 lug 2011 18:44:39
Commenti

Grazie per il tuo contributo, ma quello che vorrei sapere è se è possibile aggiungere template personalizzati ai custom post type. Ad esempio, posso creare due template e assegnare ciascun template al rispettivo post? Per quanto ne so, questo permette di specificare solo un file template per gestire quel particolare post type.

Odyss3us Odyss3us
21 lug 2011 20:05:29

Capisco, se hai bisogno di template diversi per i singoli post, potresti voler creare diversi custom post type, in base a ciascun template necessario. Immagino che dipenda da quanti template diversi ti servono. Cosa hai intenzione di fare nei template che deve essere diverso per ogni post?

mike23 mike23
22 lug 2011 13:03:37

Questa risposta è ora obsoleta. Consulta la risposta di Vinod Dalvi.

Simon East Simon East
12 set 2017 03:34:52

Non è obsoleto. Funziona ancora perfettamente ed è ancora una pratica standard.

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

Ecco cosa funziona per me:

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;
});

Quindi, dato un post di tipo personalizzato foobar con slug hello-world, il codice sopra caricherebbe il template single-foobar-hello-world.php, se esistesse.

11 giu 2015 22:12:48
0

Per chi arriva a questo thread tramite Google, WP 4.7 ha introdotto i template per tutti i tipi di post. Consulta Make WP Core per una guida completa. Non sei più limitato a un solo template per tutti i tuoi CPT, puoi assegnare template individuali post per post proprio come puoi fare con le Pagine.

8 mar 2017 17:42:13
0

Questo è un po' datato ma puoi anche provare questo:

Crea un template per il custom post type:

single-*slug-del-custom-post-type*.php

Il file dovrebbe verificare lo slug e controllare se esiste un file corrispondente, altrimenti utilizzare un template di fallback predefinito:

<?php 
    $slug = get_post_field( 'post_name', get_post() );
    $slug = ( locate_template( 'templates/*slug-del-custom-post-type*/' . $slug . '.php' ) ) ? $slug : 'default';

    get_template_part( 'templates/*slug-del-custom-post-type*/' . $slug  );
?>

Sostituisci tutte le occorrenze di slug-del-custom-post-type con lo slug effettivo del tuo custom post type.

Io lo faccio per semplicità d'uso e scopi organizzativi. Mi sembra più pulito rispetto ad avere tutti i file nella cartella principale del tema.

Esempio di struttura delle cartelle:

radice-del-tema
| |single-cases.php
|-templates
| --cases
|   |default.php
|   |case-one.php
|   |case-two.php
14 lug 2016 00:59:40
0

È molto semplice da fare.

Crea un nuovo file PHP nella directory principale del tuo tema e aggiungi questo in cima:

<?php /*
 * Template Name: La mia vista personalizzata
 * Template Post Type: Post_typename   // qui devi aggiungere il nome del tuo custom post type
 */ ?>

Un esempio completo sarà il seguente:

<?php /*
 * Template Name: La mia vista personalizzata
 * Template Post Type: Post_typename   // qui devi aggiungere il nome del tuo 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" alt="<?php the_title();?>" title="<?php the_title();?>">

    <?php endif;?>
7 giu 2019 19:22:11
0

Per prima cosa crea una pagina chiamata Elementi (o come preferisci) che mostri il contenuto dal post type elementi, poi crea un file template come quello qui sotto e chiamalo template-elementi. Seleziona questo template per la pagina che hai creato.

<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 lug 2015 11:06:22
0
-3

Abbiamo sviluppato un'altra soluzione utilizzando il plugin per template di post personalizzati

1 apr 2016 16:59:23