Cambiar la plantilla de entrada de la manera correcta

27 jul 2015, 03:05:44
Vistas: 101
Votos: 0

Estoy intentando crear una opción en la pantalla de edición de entradas (backend) para seleccionar diferentes plantillas de entrada según la selección y necesito vuestra opinión sobre si esta es la forma correcta de hacerlo.

Aquí está lo que he probado hasta ahora y que funciona:

Primero creé un meta box usando CMB2 Custom Fields

add_action( 'cmb2_init', 'select_template' );

function select_template() {

// Comenzar con un guión bajo para ocultar campos de la lista de campos personalizados
$prefix = '_templatever_';


 /* Iniciar el metabox */
$tempver = new_cmb2_box( array(
    'id'            => 'template_options',
    'title'         => __( 'Opciones de Plantilla', 'idver' ),
    'object_types'  => array( 'post', ), // Tipo de entrada
    'context'       => 'side',
    'priority'      => 'high',
    'show_names'    => true, // Mostrar nombres de campos a la izquierda
) );

$tempver->add_field( array(
    'name'             => 'Seleccionar Versión',
    'id'               => 'temp_ver',
    'type'             => 'select',
    'show_option_none' => true,
    'options'          => array(
        'v1' => __( 'Versión 1', 'cmb' ),

    ),
) );

}

Luego en single.php:

$version = get_post_meta( get_the_ID(), 'temp_ver', true );
                            if ($version == 'v1') {
                                get_template_part('single-video'); 
                            } else {

                            } 

Ahora cuando selecciono Versión 1 la plantilla cambia a single-video.

¿Es esta la forma correcta de hacerlo o es mejor usar formatos de entrada?

También, ¿es mejor (en cuanto a velocidad) implementar el código del plugin en el código del tema o simplemente instalar el plugin?

Gracias

0
Todas las respuestas a la pregunta 1
0

Creo que generalmente es mejor incluir el plugin CMB2. En cuanto a tu pregunta, hay muchas formas de abordar esto, pero creo que tu enfoque es sólido. Haría un par de cambios. Actualizaría los valores de opción para que sean el nombre de tus template-parts:

'options' => array(
    'single-video' => 'Video Individual',
),

Luego agregaría una función auxiliar en el functions.php de tu tema:

function idver_get_post_template_part( $post_id ) {
    $template = get_post_meta( $post_id, 'temp_ver', 1 );
    if ( ! $template ) {
        $template = 'default'; // Cualquiera que sea tu plantilla de respaldo
    }

    get_template_part( $template ); 
}

(obviamente, actualiza 'default' por lo que debería ser tu plantilla de respaldo. Si NO hay una predeterminada, esa función auxiliar debería ajustarse un poco)

Luego, en tu single.php, simplemente llama:

idver_get_post_template_part( get_the_ID() );
15 mar 2016 03:32:58