Posso assegnare un modello a un tipo di post personalizzato?


35

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

Ho creato un tipo di post personalizzato chiamato itemse vorrei assegnare modelli agli elementi come puoi fare con le pagine.


wpbeginner.com/wp-themes/… (questo è per i post ma è possibile modificarlo per CPT) nathanrice.net/blog/wordpress-single-post-templates (questo è per i post ma è possibile modificarlo per CPT) È un buona idea per un plugin in realtà.
Wyck,

Risposte:


50

Da WordPress versione 4.7 è ora possibile assegnare modelli di pagina personalizzati ad altri tipi di post insieme alla pagina.

A tale scopo, oltre all'intestazione del file Nome modello, è possibile specificare i tipi di post supportati da un modello utilizzando Tipo di post modello: come segue.

<?php
/*
Template Name: Full-width page layout
Template Post Type: post, page, product
*/

Puoi ottenere maggiori informazioni a riguardo nelle pagine seguenti.

https://wptavern.com/wordpress-4-7-brings-custom-page-template-functionality-to-all-post-types https://make.wordpress.org/core/2016/11/03/post -tipo-templates-in-4-7 /


21

Puoi creare un modello per tipi di post personalizzati creando file, come ad esempio:

single-mycustomposttype.php

Vedi Gerarchia dei modelli nel codice.

PS : è già stata data una risposta.


2
Grazie, ma ciò che vorrei sapere è se è possibile aggiungere modelli personalizzati ai tipi di post personalizzati. Ad esempio, posso creare due modelli e assegnare ciascun modello al rispettivo post? Ciò consente solo di specificare un file modello per gestire quel tipo di post specifico per quanto ho capito.
Odyss3us,

Se hai bisogno di modelli diversi per singoli post, puoi creare diversi tipi di post personalizzati, in base a ciascun modello necessario. Immagino che dipenda dal numero di modelli diversi necessari. che cosa hai intenzione di fare nei template che devono essere diversi su ogni post?
mike23,

Questa risposta non è più aggiornata. Vedi la risposta di Vinod Dalvi.
Simon East,

8

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 di post personalizzato foobare una lumaca del hello-worldcodice sopra carica il single-foobar-hello-world.phpmodello, se esistesse.


4

Per coloro che hanno raggiunto questo thread tramite Google, WP 4.7 ha introdotto modelli per tutti i tipi di post. Vedi Crea WP Core per una procedura dettagliata completa. Non sei più limitato a un modello per tutto il tuo CPT, puoi assegnare singoli modelli per posta proprio come puoi fare con Pages.


2

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

Crea un modello per il tipo di post personalizzato:

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

Il file dovrebbe controllare la lumaca e verificare se esiste un file, in caso contrario, fallback a un file modello predefinito:

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

Sostituisci tutte le istanze di lumaca post-tipo personalizzato con la lumaca effettiva del tuo tipo di post personalizzato.

Lo faccio per facilità d'uso e scopi organizzativi. Mi sembra più pulito che avere tutti i file nella cartella principale del tema.

struttura delle cartelle di esempio:

themeroot
| |single-cases.php
|-templates
| --cases
|   |default.php
|   |case-one.php
|   |case-two.php

1

Per prima cosa crea sulla pagina denominata Articoli come desideri che visualizzi il contenuto dai tipi di articoli degli articoli, quindi crea un file modello come di seguito e nomina quegli elementi modello. Seleziona quel modello 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>

1

Questo è molto semplice da fare.

Crea un nuovo file PHP nella directory principale del tema e aggiungilo all'inizio:

<?php /*
 * Template Name: My custom view
 * Template Post Type: Post_typename   // here you need to add the name of your custom post type
 */ ?>

L'esempio completo sarà il seguente:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.