我需要为我正在开发的一个插件做一些非常类似的事情。我在插件激活期间注册了两个独立的cpt,每个cpt都应该使用我与插件代码库捆绑的自定义单个模板。
您应该能够使用page_template 滤器
下面是我使用single\\u template过滤器的函数,可以将其调整为使用page\\u template。您只需获取全局$post变量,以便检查post类型或post ID,然后根据该数据提供模板。
add_filter( \'page_template\', \'custom_page_template\' );
public function custom_page_template( $page_template ) {
global $post;
switch ( $post->ID) {
default :
case \'2\' : // page ID 2
if( file_exists( get_stylesheet_directory() . \'/single-event-template.php\' ) ) {
$page_template = get_stylesheet_directory() . \'/single-event-template.php\';
return $single_template;
break;
case \'14\' : // page ID 14
$page_template= plugin_dir_path( dirname( __FILE__ ) ) . \'public/partials/single-event-location-template.php\';
return $page_template;
break;
} // end switch
}
我还没有使用页面模板对此进行测试,但从codex页面来看,这似乎应该可以工作。
根据您的示例,您可能希望尝试以下类似的操作:
add_filter( \'page_template\', \'my_function\' );
function my_function( $page_template ){
global $post;
$page_id = $post->ID;
if ( $my_options[\'my-reg-page\'] == $page_id ) {
$page_template = get_template_directory() . \'/reg-page.php\';
} else {
$page_template = get_template_directory() . \'/some-other-page-template.php\';
}
return $page_template;
}