How to create theme Template from Plugin in WordPress


Hello Reader, I hope you are doing something great at WordPress. Today, we will discuss how to create theme Template from Plugin and show Templates in the admin dropdown while creating pages.

Sound Good??

Yes. Definitely.  Generally, we are creating templates in the child theme folder if they are premium themes and in the theme folder if they are self-developed themes. Sometimes themes are updated automatically then our templates are lost. If we are not able to create a template in the theme then we ca create templates in Plugin. To this please follow the below steps.

How to create a theme Template from Plugin


    1. Use the below code to add multiple templates in the select box and add it in the plugin’s function file.
    2. Please replace your TEMPLATE FILE PATH with ‘template_file_path’ and replace TEMPLATE NAME with ‘Template name’.


class ClassToShowQuestions
/*** A Unique Identifier */
protected $plugin_slug;
/*** A reference to an instance of this class.*/
private static $instance;
/*** The array of templates that this plugin tracks.*/
protected $templates;
/*** Returns an instance of this class. */
public static function get_instance(){
if( null == self::$instance ){
  self::$instance = new ClassToShowQuestions();
return self::$instance;
/*** Initializes the plugin by setting filters and administration functions.*/
private function __construct() {
$this->templates = array();
// Add a filter to the attributes metabox to inject template into the cache.
add_filter( 'page_attributes_dropdown_pages_args', array( $this, 'register_project_templates' ) );
// Add a filter to the save post to inject out template into the page cache
add_filter( 'wp_insert_post_data', array( $this, 'register_project_templates' ) );
// Add a filter to the template include to determine if the page has our
// template assigned and return it's path
add_filter( 'template_include', array( $this, 'view_project_template') );
// Add your templates to this array.
 $this->templates = array('template_file_path' => 'Template name' , 'template_file_path_2' => 'Template name 2');
* Adds our template to the pages cache in order to trick WordPress
* into thinking the template file exists where it doens't really exist.
public function register_project_templates( $atts ) {
// Create the key used for the themes cache
$cache_key = 'page_templates-' . md5( get_theme_root() . '/' . get_stylesheet() );
// Retrieve the cache list.
// If it doesn't exist, or it's empty prepare an array
$templates = wp_get_theme()->get_page_templates();
if ( empty( $templates ) ) {
$templates = array();
// New cache, therefore remove the old one
wp_cache_delete( $cache_key , 'themes');
// Now add our template to the list of templates by merging our templates
// with the existing templates array from the cache.
$templates = array_merge( $templates, $this->templates );
// Add the modified cache to allow WordPress to pick it up for listing
// available templates
wp_cache_add( $cache_key, $templates, 'themes', 1800 );
return $atts;
/*** Checks if the template is assigned to the page */

public function view_project_template( $template ) {
global $post;
if (!isset($this->templates[get_post_meta( $post->ID, '_wp_page_template', true )] ) ) {
return $template;}
$file = plugin_dir_path(__FILE__). get_post_meta( $post->ID, '_wp_page_template', true );
// Just to be safe, we check if the file exist first
if( file_exists( $file ) ) {
return $file;
else { echo $file; }
return $template;
/***/ End of class ********/

add_action( 'plugins_loaded', array( 'ClassToShowQuestions', 'get_instance' ) );

Hope this article helps you in your WordPress development. Please do let me know if you have any queries, questions on this article.


  1. Thanks in favor of sharing such a fastidious opinion, piece
    of writing is nice, thats why i have read it entirely

  2. Wow, wonderful blog layout! How long have you been blogging for?
    you made blogging look easy. The overall look of your website
    is great, let alone the content!

Leave a Reply

Your email address will not be published. Required fields are marked *

6 − one =

You May Like Also

%d bloggers like this: