¿Cambiar la plantilla de la página mediante programación?

4

Tengo dos plantillas de página y Qtranslate instalado.

Quiero elegir uno u otro según el idioma seleccionado.

¿Puedo hacer algo como esto?

if($q_config['lang'] == 'en'){
// load page-template_en.php
}else{
// load page-template_de.php
}

¿Alguna idea?

¡Gracias!

    
pregunta Klian 22.02.2012 - 13:25

4 respuestas

-1

Es posible usar el gancho template_redirect .

Parece algo como esto:

 function language_redirect()
 {
      global $q_config;

      if( $q_config['lang'] == 'en' )
      {
           include( get_template_directory() . '/page-template_en.php' );
           exit;
      }
      else
      {
           include( get_template_directory() . '/page-template_de.php' );
           exit;
      }
 }
 add_action( 'template_redirect', 'language_redirect' );

El código no se ha probado, pero debería verse así.

Vea mi respuesta similar AQUÍ para más ayuda.

    
respondido por el Shane 22.02.2012 - 14:37
5

Finalmente lo encontré! Si entiendo bien su pregunta, la plantilla se guarda básicamente como metadatos que deben actualizarse.

update_post_meta( $post_id, '_wp_page_template', 'your_custom_template' );
// or
update_metadata('post_type',  $post_id, '_wp_page_template', 'your_custom_template' );

Fuente y más información

    
respondido por el David Hobs 04.02.2013 - 04:02
3

La mejor manera (canónica) es usar template_include hook: enlace

Código de ejemplo:

function language_redirect($template) {
    global $q_config;
    $new_template = locate_template( array( 'page-'.$q_config['lang'].'.php' ) );
    if ( '' != $new_template ) {
        return $new_template ;
    }
    return $template;
}
add_action( 'template_include', 'language_redirect' );
    
respondido por el Kuba Niewiarowski 02.05.2014 - 08:14
2

Debería ser posible usando el gancho template_include . El código no está probado:

 add_action( 'template_include', 'language_redirect' );

 function language_redirect( $template ) {
      global $q_config;
      $lang = ( 'en' === $q_config['lang'] ) ? 'en' : 'de';

      $template = str_replace( '.php', '_'.$lang.'.php', $template );
      return $template;
 }
    
respondido por el Geert 22.02.2012 - 14:48

Lea otras preguntas en las etiquetas