是否以编程方式更改页面模板?

时间:2012-02-22 作者:Klian

我安装了两个页面模板和Qtranslate。

我想根据所选语言选择一种或另一种。

我可以这样做吗?

if($q_config[\'lang\'] == \'en\'){
// load page-template_en.php
}else{
// load page-template_de.php
}
有什么想法吗?

谢谢

5 个回复
最合适的回答,由SO网友:Shane 整理而成

可以使用template_redirect

看起来像这样:

 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\' );
代码未经测试,但应该是这样的。

查看我的类似答案HERE 获取更多帮助。

SO网友:David Hobs

终于找到了!如果我正确理解您的问题,模板基本上保存为需要更新的元数据。

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 and further info

SO网友:Kuba Niewiarowski

最好的(规范的)方法是使用template_include 挂钩:http://codex.wordpress.org/Plugin_API/Filter_Reference/template_include

示例代码:

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

SO网友:Geert

应该可以使用template_include 钩未测试代码:

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

SO网友:FloO

谢谢大家的建议!我想在post only上默认设置“Elementor canvas”模板,我这样做了:

function default_post_template_elementor_canvas($post_type, $post) 
{
    $wishedTemplate = \'elementor_canvas\'; // to see available template var_dump(get_page_templates($post))
    if ($post_type === \'post\'
            && in_array($wishedTemplate, get_page_templates($post)) // Only if elementor_canvas is available
            && $post->ID != get_option(\'page_for_posts\') // Not the page for listing posts
            && metadata_exists(\'post\', $post->ID, \'_wp_page_template\') === false) {  // Only when meta _wp_page_template is not set
      add_post_meta($post->ID, \'_wp_page_template\', $wishedTemplate);
    }
}
add_action(\'add_meta_boxes\', \'default_post_template_elementor_canvas\', 10, 2);

结束

相关推荐

Sub category templates

我继承了一个Wordpress网站,我的公司在我开始在这里工作之前就建立了这个网站。我会去问建造它的人这个问题,但他现在已经离开了公司。我的查询与wordpress类别的自定义模板相关。我知道您可以创建一个名为“类别-”的模板文件。当访问该类别时,它将使用该自定义模板。在本例中,该文件称为“category limousin magazine”。php\'这很好——我的问题涉及到这个类别的子类别,即在《利木赞》杂志下,我有2011、2010、2009、2008、2007和2006个类别。不知何故,在建立网