Schimbarea șablonului de postare în mod corect
Încerc să creez o opțiune în ecranul de editare al postărilor (backend) pentru a selecta diferite șabloane de postare bazate pe selecție și am nevoie de părerea voastră dacă acesta este modul corect de a face acest lucru.
Iată ce am încercat până acum și funcționează:
Mai întâi am creat un meta box folosind CMB2 Custom Fields
add_action( 'cmb2_init', 'select_template' );
function select_template() {
// Folosește un underscore pentru a ascunde câmpurile din lista de câmpuri personalizate
$prefix = '_templatever_';
/* Inițializează metabox-ul */
$tempver = new_cmb2_box( array(
'id' => 'template_options',
'title' => __( 'Opțiuni Șablon', 'idver' ),
'object_types' => array( 'post', ), // Tipul de postare
'context' => 'side',
'priority' => 'high',
'show_names' => true, // Arată numele câmpurilor în stânga
) );
$tempver->add_field( array(
'name' => 'Selectează Versiunea',
'id' => 'temp_ver',
'type' => 'select',
'show_option_none' => true,
'options' => array(
'v1' => __( 'Versiunea 1', 'cmb' ),
),
) );
}
Apoi în single.php:
$version = get_post_meta( get_the_ID(), 'temp_ver', true );
if ($version == 'v1') {
get_template_part('single-video');
} else {
}
Acum când selectez Versiunea 1 șablonul se schimbă în single-video.
Deci, este acesta modul corect de a face acest lucru sau este mai bine să folosesc formatele de postare?
De asemenea, este mai bun (din punct de vedere al vitezei) să implementez codul plugin-ului în codul temei sau doar să instalez plugin-ul?
Mulțumesc

Cred că, în general, este mai bine să incluzi pluginul CMB2. În legătură cu întrebarea ta, există multe modalități de a aborda acest lucru, dar cred că metoda ta este una solidă. Aș face câteva modificări. Aș actualiza valorile opțiunilor să fie numele părților de template:
'options' => array(
'single-video' => 'Single Video',
),
Apoi, aș adăuga o funcție helper în functions.php al temei tale:
function idver_get_post_template_part( $post_id ) {
$template = get_post_meta( $post_id, 'temp_ver', 1 );
if ( ! $template ) {
$template = 'default'; // Orice ar fi partea de template implicită
}
get_template_part( $template );
}
(evident, actualizează 'default' cu orice ar trebui să fie partea de template implicită/fallback. Dacă NU există o valoare implicită, această funcție helper ar trebui actualizată puțin)
Apoi, în single.php, apelează pur și simplu:
idver_get_post_template_part( get_the_ID() );
