Create Theme Template In The Plugin And Show Them In Admin Template Select Box


    1. To create a template we need to place it in parent theme or in a child theme.
    2. Sometimes themes are updated automatically then our templates are lost. So to avoiding this type of issues we need to create templates in the plugins and could show them in the “Template” select box which appears in the admin’s add post page.
    3. Use below code to add multiple templates in the select box and add it in the plugin’s function file
    4. 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' ) );

Related Posts

  • Add datepicker in the WordPressAugust 3, 2016 Add datepicker in the WordPress (1)
    To add date picker in the WordPress theme or plugin or template simply add this code in the function.php […]
  • About WordPressJuly 20, 2016 About WordPress (0)
    Many blogger and readers are thinking to create a blog website online but most of the time they are confused with the platform.WordPress […]
  • Add Login Logout links in WordPress HeaderAugust 2, 2016 Add Login Logout links in WordPress Header (2)
    WordPress Login and Logout links in the menu.Suppose you are doing customization with code and want to add Login and Logout links […]
  • Add Custom Registration Links On Woocommerce Checkout PageAugust 6, 2016 Add Custom Registration Links On Woocommerce Checkout Page (4)
    Add below action in the function.php page. you can add also it in child theme function.php theme or in the custom plugin function […]
  • Introduction to Hooks: Actions and FiltersAugust 6, 2016 Introduction to Hooks: Actions and Filters (3)
    What are hooks?Hooks in WordPress essentially allow you to manipulate code without editing core files. They are used extensively […]
  • Add Feature Image To PostAugust 7, 2016 Add Feature Image To Post (0)
    If you are trying to add featured image to post in the custom template then please add below code while uploading an image where […]

Author: Akash Wagh

Hello friends, I have created akashwagh.com for the unique bloggers and readers. We’re accepting unique guest posts from real authors. If any blogger or author interested to post a blog on akashwagh.com then they are always welcome.

4 thoughts on “Create Theme Template In The Plugin And Show Them In Admin Template Select Box”

  1. 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