问题:
为
Mark suggested already, 通过操纵缓存加载模板远远不是标准做法。使用这些缓存更改,即使您修改代码以使用WordPress
4.7+
, 无法保证您在将来的更新中不会发现类似的问题。因此,最好使用下面提到的任何解决方案:
主题解决方案:
您可以使用实际的
page templates 在活动主题中。您的活动主题是
recommended 放置这些页面模板。
插件解决方案
但是,如果出于某种原因必须将这些模板与插件一起分配,请使用
theme_page_templates
钩子这样做。这对WordPress有用
4.4+
.
以下是使用theme_page_templates
过滤器挂钩:
function get_my_template( $template ) {
$post = get_post();
$page_template = get_post_meta( $post->ID, \'_wp_page_template\', true );
if( $page_template == \'templates/study_home.php\' ){
return plugin_dir_path(__FILE__) . "templates/study_home.php";
}
if( $page_template == \'templates/study_job_home.php\' ){
return plugin_dir_path(__FILE__) . "templates/study_job_home.php";
}
if( $page_template == \'templates/exams.php\' ){
return plugin_dir_path(__FILE__) . "templates/exams.php";
}
if( $page_template == \'templates/colleges.php\' ){
return plugin_dir_path(__FILE__) . "templates/colleges.php";
}
return $template;
}
function filter_admin_page_templates( $templates ) {
$templates[\'templates/exams.php\'] = __(\'Exams\');
$templates[\'templates/colleges.php\'] = __(\'Colleges\');
$templates[\'templates/study_home.php\'] = __(\'Study Home\');
$templates[\'templates/study_job_home.php\'] = __(\'Study Job Home\');
return $templates;
}
function add_my_templates() {
if( is_admin() ) {
add_filter( \'theme_page_templates\', \'filter_admin_page_templates\' );
}
else {
add_filter( \'page_template\', \'get_my_template\', 1 );
}
}
add_action( \'wp_loaded\', \'add_my_templates\' );
使用上述代码而不是您提供的代码。它适用于任何WordPress版本
4.4
之后。我已经用WordPress测试过了
4.7.2
&;它工作得很好。