Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*
- Plugin Name: PageTemplater
- Description: Allows page templates in plugin/templates/ folder to appear and be used on page edit screen. Modified by bcworkz to work on quick edit form.
- Author: Harri Bell-Thomas
- Version: 0.50 beta
- License: GPL
- */
- class PageTemplater {
- /**
- * 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 PageTemplater();
- }
- 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.
- // --Does nothing for page attributes, this filter fires just before the cache is called
- // by page_template_dropdown()
- add_filter(
- //'page_attributes_dropdown_pages_args',
- // 'wp_dropdown_pages' fires for both quick edit and edit pages, the attributes
- // filter only fires for edit pages -- bcworkz
- 'wp_dropdown_pages',
- 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
- // --Loads template when page dependent on it is displayed
- add_filter(
- 'template_include',
- array( $this, 'view_project_template')
- );
- // Add your templates to this array.
- $this->templates = array(
- 'mytemplate-test.php' => 'Injected Template',
- );
- }
- /**
- * 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__). 'templates/' .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.' not found!'; }
- return $template;
- }
- }
- add_action( 'plugins_loaded', array( 'PageTemplater', 'get_instance' ) );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement