使用页面模板筛选器覆盖页面模板

时间:2016-09-20 作者:Prafulla Kumar Sahu

我试过了

add_filter( \'page_template\', \'single_page_template\' );

function single_page_template( $template )
  {
      if ( is_singular( \'dwqa-question\' ) ) {

          $template =  get_stylesheet_directory() . \'/\' . page-question.php;
      }
      return $template;
  }
现在,如果我愿意echo get_page_template(); 我正在

/var/www/html/my-site/wp-content/themes/theme-child/page-question.php

但是修改页面问题。php文件不影响输出,将一些文本添加到此模板中,如

get_header(); ?>zzzzzzzzz

没有出去。页php被分配到单个问题页面,使用template_include 胡克是因为这个,但如果是的话get_page_template() 还应给出页面。php tempalte路径作为输出。

刚刚修改了页面。类似php

get_header(); ?>aaaa

aaaa 出现在第页上。

我应该如何覆盖它??请让我知道我是否应该提供任何其他细节?

4 个回复
SO网友:elmediano

从您的问题来看,您似乎试图覆盖自定义帖子类型的单个模板。如果是,则要使用的筛选器为single_template 而不是page_template:

function single_page_template($single_template) {
    global $post;

    if ($post->post_type == \'dwqa-question\') {
        $single_template = get_stylesheet_directory() . \'/page-question.php\';
    }

    return $single_template;
}
add_filter( \'single_template\', \'single_page_template\' );
我曾经遇到过这个问题,它让我发疯,直到我在WordPress Codex上找到了过滤器:https://codex.wordpress.org/Plugin_API/Filter_Reference/single_template

SO网友:WebElaine

根据主题手册(https://developer.wordpress.org/themes/template-files-section/page-template-files/page-templates/#creating-custom-page-templates-for-global-use), “请勿使用page- 作为前缀,因为WordPress会将文件解释为一个专门的模板,意味着只应用于站点上的一个页面。“”

So-尝试重命名page-question.php 类似于tpl-question.php (tpl是通用前缀,是template的缩写)。

SO网友:Kalamun

您将代码的“page question.php”部分放错了,必须将其包含在引号中:

$template =  get_stylesheet_directory() . \'/page-question.php\';

SO网友:kenv

只需尝试实现重写规则函数的刷新。

    flush_rewrite_rules();
您可以自由使用其他方式,

    global $wp_rewrite;
    $wp_rewrite->flush_rules( true );

相关推荐