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.