web-dev-qa-db-fra.com

Changer le modèle de page par programme?

J'ai deux modèles de page et Qtranslate installés.

Je veux choisir l'un ou l'autre en fonction de la langue sélectionnée.

Puis-je faire quelque chose comme ça?

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

Une idée ?

Merci!

5
Klian

Enfin trouvé! Si je comprends bien votre question, le modèle est essentiellement enregistré en tant que métadonnées devant être mises à jour.

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

Source et autres informations

7
David Hobs

La meilleure façon (canonique) est d'utiliser template_include hook: http://codex.wordpress.org/Plugin_API/Filter_Reference/template_include

Exemple de code:

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' );
4

Devrait être possible en utilisant le hook template_include. Le code n'est pas testé:

 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;
 }
3
Geert