我需要为我正在开发的一个插件做一些非常类似的事情。我在插件激活期间注册了两个独立的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;
}