Modificare il template del post nel modo corretto
Sto cercando di creare un'opzione nella schermata di modifica dei post (backend) per selezionare diversi template di post in base alla selezione e ho bisogno della vostra opinione per capire se questo è il modo corretto di procedere.
Ecco cosa ho provato finora e che funziona:
Per prima cosa ho creato un meta box utilizzando CMB2 Custom Fields
add_action( 'cmb2_init', 'select_template' );
function select_template() {
// Inizia con un underscore per nascondere i campi dalla lista dei campi personalizzati
$prefix = '_templatever_';
/* Inizializza il metabox */
$tempver = new_cmb2_box( array(
'id' => 'template_options',
'title' => __( 'Opzioni Template', 'idver' ),
'object_types' => array( 'post', ), // Tipo di post
'context' => 'side',
'priority' => 'high',
'show_names' => true, // Mostra i nomi dei campi a sinistra
) );
$tempver->add_field( array(
'name' => 'Seleziona Versione',
'id' => 'temp_ver',
'type' => 'select',
'show_option_none' => true,
'options' => array(
'v1' => __( 'Versione 1', 'cmb' ),
),
) );
}
Poi in single.php:
$version = get_post_meta( get_the_ID(), 'temp_ver', true );
if ($version == 'v1') {
get_template_part('single-video');
} else {
}
Ora quando seleziono Versione 1 il template cambia in single-video.
Quindi, è questo il modo corretto per farlo o è meglio usare i formati di post?
Inoltre, è meglio (in termini di velocità) implementare il codice del plugin nel codice del tema o semplicemente installare il plugin?
Grazie

Penso che sia generalmente meglio includere il plugin CMB2. Per quanto riguarda la tua domanda, ci sono molti modi per affrontare questo problema, ma credo che il tuo approccio sia solido. Farei un paio di modifiche. Aggiornerei i valori delle opzioni con il nome delle tue template-parts:
'options' => array(
'single-video' => 'Single Video',
),
Quindi aggiungerei una funzione helper al file functions.php del tuo tema:
function idver_get_post_template_part( $post_id ) {
$template = get_post_meta( $post_id, 'temp_ver', 1 );
if ( ! $template ) {
$template = 'default'; // Qualunque sia la tua template part di fallback
}
get_template_part( $template );
}
(ovviamente, aggiorna 'default' con qualunque sia la tua template part di default/fallback. Se NON c'è un default, questa funzione helper dovrebbe essere modificata leggermente)
Poi nel tuo single.php, chiama semplicemente:
idver_get_post_template_part( get_the_ID() );
