问题描述
我想提供我的自定义帖子类型作为插件,以便人们可以使用它而不触摸他们的主题文件夹。但是自定义帖子类型模板 (如 single-movies.php) 驻留在主题文件夹中。有没有办法让 WP 检查插件文件夹中的 single-movies.php?将功能挂接到 Filer Hierarchy 中?或者 get_template_directory(); ?
最佳解决方案
您可以使用 single_template
过滤钩。
/* Filter the single_template with our custom function*/
add_filter('single_template', 'my_custom_template');
function my_custom_template($single) {
global $wp_query, $post;
/* Checks for single template by post type */
if ($post->post_type == "POST TYPE NAME"){
if(file_exists(PLUGIN_PATH . '/Custom_File.php'))
return PLUGIN_PATH . '/Custom_File.php';
}
return $single;
}
次佳解决方案
在主题文件夹中添加一个自定义帖子类型特定模板的检查到 @Brainternet 答案。
function load_person_template($template) {
global $post;
// Is this a "my-custom-post-type" post?
if ($post->post_type == "my-custom-post-type"){
//Your plugin path
$plugin_path = plugin_dir_path( __FILE__ );
// The name of custom post type single template
$template_name = 'single-my-custom-post-type.php';
// A specific single template for my custom post type exists in theme folder? Or it also doesn't exist in my plugin?
if($template === get_stylesheet_directory() . '/' . $template_name
|| !file_exists($plugin_path . $template_name)) {
//Then return "single.php" or "single-my-custom-post-type.php" from theme directory.
return $template;
}
// If not, return my plugin custom post type template.
return $plugin_path . $template_name;
}
//This is not my custom post type, do nothing with $template
return $template;
}
add_filter('single_template', 'load_person_template');
现在,您可以让插件用户将模板从您的插件复制到主题以覆盖它。
有了这个例子,模板必须在插件和主题的根目录下。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。