From: Stephen Cameron Date: Thu, 22 Jul 2021 09:49:00 +0000 (+0200) Subject: Localise configuration and add simple plugin to enable theme-independent page templates. X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=ef790b3fe66ec93847e79385ce4d989edcc60159;p=nec-initiative-wordpress.git Localise configuration and add simple plugin to enable theme-independent page templates. --- diff --git a/.gitignore b/.gitignore index 567e5c6..8a2d890 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,9 @@ local-config.php node_modules *.log /wp-content/* +!/wp-content/plugins/ +/wp-content/plugins/* +!/wp-content/plugins/cube-templater/ # /wp-content/themes/index.php # !/wp-content/themes/ # !/wp-content/mu-plugins/ diff --git a/wp-config.php b/wp-config.php index 9d3b4cf..073a583 100644 --- a/wp-config.php +++ b/wp-config.php @@ -1,41 +1,32 @@ templates = array(); + + + // Add a filter to the attributes metabox to inject template into the cache. + if ( version_compare( floatval( get_bloginfo( 'version' ) ), '4.7', '<' ) ) { + + // 4.6 and older + add_filter( + 'page_attributes_dropdown_pages_args', + array( $this, 'register_project_templates' ) + ); + + } else { + + // Add a filter to the wp 4.7 version attributes metabox + add_filter( + 'theme_page_templates', array( $this, 'add_new_template' ) + ); + + } + + // 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( + 'gutenberg-full-width.php' => 'Gutenberg Full Width Page', + ); + + } + + /** + * Adds our template to the page dropdown for v4.7+ + * + */ + public function add_new_template( $posts_templates ) { + $posts_templates = array_merge( $posts_templates, $this->templates ); + return $posts_templates; + } + + /** + * 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 ) { + // Return the search template if we're searching (instead of the template for the first result) + if ( is_search() ) { + return $template; + } + + // Get global post + global $post; + + // Return template if post is empty + if ( ! $post ) { + return $template; + } + + // Return default template if we don't have a custom one defined + if ( ! isset( $this->templates[get_post_meta( + $post->ID, '_wp_page_template', true + )] ) ) { + return $template; + } + + // Allows filtering of file path (default: ./templates subfolder of theme) + $filepath = apply_filters( 'page_templater_plugin_dir_path', plugin_dir_path( __FILE__ ) . 'templates/' ); + + $file = $filepath . 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 + return $template; + + } + +} +add_action( 'plugins_loaded', array( 'PageTemplater', 'get_instance' ) ); diff --git a/wp-content/plugins/cube-templater/templates/gutenberg-full-width.php b/wp-content/plugins/cube-templater/templates/gutenberg-full-width.php new file mode 100644 index 0000000..ee7518b --- /dev/null +++ b/wp-content/plugins/cube-templater/templates/gutenberg-full-width.php @@ -0,0 +1,35 @@ + +
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+ +