अद्यतन उत्तर
क्लीनर और छोटा संस्करण।
function load_movie_template( $template ) {
global $post;
if ( 'movie' === $post->post_type && locate_template( array( 'single-movie.php' ) ) !== $template ) {
/*
* This is a 'movie' post
* AND a 'single movie template' is not found on
* theme or child theme directories, so load it
* from our plugin directory.
*/
return plugin_dir_path( __FILE__ ) . 'single-movie.php';
}
return $template;
}
add_filter( 'single_template', 'load_movie_template' );
पुराना उत्तर
@Brainternet उत्तर थीम फ़ोल्डर में एक कस्टम पोस्ट प्रकार विशिष्ट टेम्पलेट के लिए एक चेक जोड़ा गया।
function load_cpt_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_cpt_template');
अब आप प्लगइन उपयोगकर्ताओं को इसे ओवरराइड करने के लिए अपने थीम से टेम्पलेट को उनकी थीम पर कॉपी करने दे सकते हैं।
इस उदाहरण के साथ, टेम्पलेट को प्लगइन और थीम दोनों की मूल निर्देशिका में होना चाहिए।