我正在尝试为自定义帖子类型应用过滤器,并为其提供不同的模板。所有这些都来自一个插件。然而,尽管证实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\') );
最合适的回答,由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;
}