如何使用插件将模板文件替换为自定义帖子类型?

时间:2019-07-07 作者:Matthew Brown aka Lord Matt

我正在尝试为自定义帖子类型应用过滤器,并为其提供不同的模板。所有这些都来自一个插件。然而,尽管证实add_hooks() 如果调用(该区域中的所有其他内容都有效),则完全忽略过滤器。

我只能猜测我做错了什么,因为它看起来好像从未应用过过滤器。我知道这不是因为我else/die 在那里。它要么给我模板要么就死(对吧?)但它忽视了我。如何正确执行此操作?

class some_cool_new_stuff{

   public function __construct(){
       $this->add_hooks();
   }

   public function page_template( $page_template ) {
       if ( is_page( \'my_lovely_post_type\' ) ) {
           $page_template = MY_CUSTOM_CONST_FOR_PLUGIN_DIR . \'templates/business-page.php\'; // this does not happen but the path is 100% correct
       }else{
          die("Help me, I\'m going to die!!"); // this never happens
       }
       return $page_template; 
   }

   public function add_hooks(){
       // ... 
       add_action( \'init\', array($this,\'awesome_function\') );
       add_filter( \'page_template\', array($this,\'page_template\') );
       // ... 
   }

   // ...

}
这里还有一些对我不起作用的东西:

    add_filter( \'my_lovely_post_type_template\', array($this,\'page_template\') );
    add_filter( \'template_include\', array($this,\'page_template\') );

1 个回复
最合适的回答,由SO网友:Matthew Brown aka Lord Matt 整理而成

在尝试了一系列过滤器的可能性之后,我找到了一个可行的。

add_filter( \'single_template\', array($this,\'page_template\') );
这使得我的函数被调用。然而,我还需要做更多的更改(尤其是去掉die 行)。最后,这就是成功的原因:

public function page_template( $page_template ) {
    global $post;
    if ( \'my_lovely_post_type\' === $post->post_type ) {
        $page_template = BUSINESS_PAGE_PLUGIN_DIR . \'templates/business-page.php\';
    }
    return $page_template;
}

相关推荐

Custom term templates

所以,我在网上做了一些研究,但没有找到可靠的答案,所以我来了。我需要为特定类别创建自定义woocommerce类别页面。例如,我有一个类别叫做“Awesome”。而不是使用由短代码生成的常规类别页面[product_category category=\"something\"], 我想为自定义特定类别页面Awesome.我发现我需要编辑taxonomy-product_cat.php 但我不知道如何将其链接到名为awesome.换句话说,我正在考虑制作php文件的自定义副本,然后将其添加为主题templ