Posso assegnare un file modello a un tipo di post personalizzato?
Ho creato un tipo di post personalizzato chiamato items
e vorrei assegnare modelli agli elementi come puoi fare con le pagine.
Posso assegnare un file modello a un tipo di post personalizzato?
Ho creato un tipo di post personalizzato chiamato items
e vorrei assegnare modelli agli elementi come puoi fare con le pagine.
Risposte:
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 /
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.
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 foobar
e una lumaca del hello-world
codice sopra carica il single-foobar-hello-world.php
modello, se esistesse.
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.
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
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>
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();?>
Abbiamo elaborato un'altra soluzione utilizzando il plug-in personalizzato modello post