diff --git a/_notes/dwsync.xml b/_notes/dwsync.xml
index 29cc5bb..54376e2 100644
--- a/_notes/dwsync.xml
+++ b/_notes/dwsync.xml
@@ -1,5 +1,6 @@
-
+
+
\ No newline at end of file
diff --git a/grandchild-functions.php b/grandchild-functions.php
index d520ef1..e5797d7 100644
--- a/grandchild-functions.php
+++ b/grandchild-functions.php
@@ -4,44 +4,13 @@
Description: Sample grandchild theme built as a plugin.
Author: Web Dev
Author URI: http://www.your-website.com
-Version: 1.0
+Version: 1.0
*/
-
-
-require_once( plugin_dir_path( __FILE__ ) . 'template-class.php' );
-add_action( 'plugins_loaded', array( 'Page_Template_Plugin', 'get_instance' ) );
// Adds our new file with styles
function grandchild_add_scripts_styles() {
- wp_register_script( 'grandchild-script', plugins_url( 'grandchild-scripts.js', __FILE__ ), array( 'jquery' ), '1.0' );
- wp_enqueue_script( 'grandchild-script' );
wp_register_style( 'grandchild-style', plugins_url( 'grandchild-styles.css', __FILE__ ), array(), '1.0' );
wp_enqueue_style( 'grandchild-style' );
}
add_action( 'wp_enqueue_scripts', 'grandchild_add_scripts_styles', 99999999 );
-
-// Search for templates in plugin 'templates' dir, and load if exists
-function grandchild_template_include( $template ) {
- if ( file_exists( untrailingslashit( plugin_dir_path( __FILE__ ) ) . '/templates/' . basename( $template ) ) )
- $template = untrailingslashit( plugin_dir_path( __FILE__ ) ) . '/templates/' . basename( $template );
-
- return $template;
-}
-add_filter( 'template_include', 'grandchild_template_include', 11 );
-
-// We are hooking to the 'load_custom_header' filter
-// and return a value of 'true' meaning that we want to
-// load a custom header
-/*add_filter( 'load_custom_header', '__return_true', 99 );
-
-add_filter( 'get_custom_header', function( $header ) {
- return plugin_dir_path( __FILE__ ).'templates/header.php';
-}, 99 );
-
-add_filter( 'load_custom_footer', '__return_true', 99 );
-
-add_filter( 'get_custom_footer', function( $footer ) {
- return plugin_dir_path( __FILE__ ).'templates/footer.php';
-}, 99 );
-*/
\ No newline at end of file
diff --git a/template-class.php b/template-class.php
new file mode 100644
index 0000000..f64c1ce
--- /dev/null
+++ b/template-class.php
@@ -0,0 +1,221 @@
+templates = array();
+ $this->plugin_locale = 'pte';
+
+ // Grab the translations for the plugin
+ add_action( 'init', array( $this, 'load_plugin_textdomain' ) );
+
+ // Add a filter to the page attributes metabox to inject our template into the page template cache.
+ add_filter('page_attributes_dropdown_pages_args', array( $this, 'register_project_templates' ) );
+
+ // Add a filter to the save post in order 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 in order to determine if the page has our template assigned and return it's path
+ add_filter('template_include', array( $this, 'view_project_template') );
+
+ // Register hooks that are fired when the plugin is activated, deactivated, and uninstalled, respectively.
+ register_deactivation_hook( __FILE__, array( $this, 'deactivate' ) );
+
+ // Add your templates to this array.
+ $this->templates = array(
+ 'page-sample.php' => __( 'Sample', $this->plugin_slug ),
+ //'page-sample2.php' => __( 'Sample2', $this->plugin_slug ),
+ //'page-sample3.php' => __( 'Sample3', $this->plugin_slug ),
+ );
+
+ // adding support for theme templates to be merged and shown in dropdown
+ $templates = wp_get_theme()->get_page_templates();
+ $templates = array_merge( $templates, $this->templates );
+
+ } // end constructor
+
+ /**
+ * Load the plugin text domain for translation.
+ *
+ * @since 1.0.0
+ */
+ public function load_plugin_textdomain() {
+
+ $domain = $this->plugin_slug;
+ $locale = apply_filters( 'plugin_locale', get_locale(), $domain );
+
+ load_textdomain( $domain, trailingslashit( WP_LANG_DIR ) . $domain . '/' . $domain . '-' . $locale . '.mo' );
+ load_plugin_textdomain( $domain, FALSE, basename( dirname( __FILE__ ) ) . '/languages/' );
+
+ } // end load_plugin_textdomain
+
+ /**
+ * Adds our template to the pages cache in order to trick WordPress
+ * into thinking the template file exists where it doens't really exist.
+ *
+ * @param array $atts The attributes for the page attributes dropdown
+ * @return array $atts The attributes for the page attributes dropdown
+ * @verison 1.0.0
+ * @since 1.0.0
+ */
+ 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_cache_get( $cache_key, 'themes' );
+ if ( empty( $templates ) ) {
+ $templates = array();
+ } // end if
+
+ // Since we've updated the cache, we need to delete the old cache
+ 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;
+
+ } // end register_project_templates
+
+ /**
+ * Checks if the template is assigned to the page
+ *
+ * @version 1.0.0
+ * @since 1.0.0
+ */
+ public function view_project_template( $template ) {
+
+ global $post;
+
+ // If no posts found, return to
+ // avoid "Trying to get property of non-object" error
+ if ( !isset( $post ) ) return $template;
+
+ if ( ! isset( $this->templates[ get_post_meta( $post->ID, '_wp_page_template', true ) ] ) ) {
+ return $template;
+ } // end if
+
+ $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;
+ } // end if
+
+ return $template;
+
+ } // end view_project_template
+
+ /*--------------------------------------------*
+ * deactivate the plugin
+ *---------------------------------------------*/
+ static function deactivate( $network_wide ) {
+ foreach($this as $value) {
+ page-template-example::delete_template( $value );
+ }
+
+ } // end deactivate
+
+ /*--------------------------------------------*
+ * Delete Templates from Theme
+ *---------------------------------------------*/
+ public function delete_template( $filename ){
+ $theme_path = get_template_directory();
+ $template_path = $theme_path . '/' . $filename;
+ if( file_exists( $template_path ) ) {
+ unlink( $template_path );
+ }
+
+ // we should probably delete the old cache
+ wp_cache_delete( $cache_key , 'themes');
+ }
+
+ /**
+ * Retrieves and returns the slug of this plugin. This function should be called on an instance
+ * of the plugin outside of this class.
+ *
+ * @return string The plugin's slug used in the locale.
+ * @version 1.0.0
+ * @since 1.0.0
+ */
+ public function get_locale() {
+ return $this->plugin_slug;
+ } // end get_locale
+
+} // end class
diff --git a/templates/_notes/dwsync.xml b/templates/_notes/dwsync.xml
new file mode 100644
index 0000000..57dc357
--- /dev/null
+++ b/templates/_notes/dwsync.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/templates/page-sample.php b/templates/page-sample.php
new file mode 100644
index 0000000..db4705d
--- /dev/null
+++ b/templates/page-sample.php
@@ -0,0 +1,24 @@
+
+
+
\ No newline at end of file