add_action('thematic_searchloop', 'mytheme_search_loop');
// End of the Contextual/Highlight Search functions
+
+// This series of functions is used for forcing a template if one or any is picked.
+// START FORCE TEMPLATE FUNCTIONS
+add_filter( 'template_include', 'glm_force_template', 99 );
+function glm_force_template( $template ) {
+ global $post;
+ /*
+ * Uncomment this IF statement surrounding the locate_template line
+ * if you want to use the given template (index.php) EVERY time any page
+ * template is selected & included.
+ */
+ //if (get_page_template_slug( $post->ID ) == "test-template") {
+ $template = locate_template( "index.php" );
+ //}
+ return $template;
+}
+function get_custom_page_templates() {
+ $templates = array();
+ // maybe by options? --> $templates = get_option( 'custom_page_templates' );
+ // maybe by conf file? --> $templates = include 'custom_page_templates.php';
+ return apply_filters( 'custom_page_templates', $templates );
+}
+add_action( 'edit_form_after_editor', 'custom_page_templates_init' );
+add_action( 'load-post.php', 'custom_page_templates_init_post' );
+add_action( 'load-post-new.php', 'custom_page_templates_init_post' );
+
+function custom_page_templates_init() {
+ remove_action( current_filter(), __FUNCTION__ );
+ if ( is_admin() && get_current_screen()->post_type === 'page' ) {
+ $templates = get_custom_page_templates(); // the function above
+ if ( ! empty( $templates ) ) {
+ set_custom_page_templates( $templates );
+ }
+ }
+}
+function custom_page_templates_init_post() {
+ remove_action( current_filter(), __FUNCTION__ );
+ $method = filter_input( INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_STRING );
+ if ( empty( $method ) || strtoupper( $method ) !== 'POST' ) return;
+ if ( get_current_screen()->post_type === 'page' ) {
+ custom_page_templates_init();
+ }
+}
+function set_custom_page_templates( $templates = array() ) {
+ if ( ! is_array( $templates ) || empty( $templates ) ) return;
+ $core = array_flip( (array) get_page_templates() ); // templates defined by file
+ $data = array_filter( array_merge( $core, $templates ) );
+ ksort( $data );
+ $stylesheet = get_stylesheet();
+ $hash = md5( get_theme_root( $stylesheet ) . '/' . $stylesheet );
+ $persistently = apply_filters( 'wp_cache_themes_persistently', false, 'WP_Theme' );
+ $exp = is_int( $persistently ) ? $persistently : 1800;
+ wp_cache_set( 'page_templates-' . $hash, $data, 'themes', $exp );
+}
+add_filter( 'custom_page_templates', function( $now_templates ) {
+ // Any slug->name pairs down here will be selectable in the admin side of
+ // a page. You do not need to create a new template file. You can refer to
+ // this template by its slug in our index.php using get_page_template_slug
+ // Below are some commented examples of custom quasi-templates.
+ $templates = array(
+ // 'some-custom-page-template' => 'Some Custom Page Template',
+ // 'any-template-slug' => 'Sample Template' ,
+ );
+
+ return array_merge( $now_templates, $templates );
+} );
+// END FORCE TEMPLATE FUNCTIONS
+
+
+// THIS IS HOW IT CAN BE USED IN INDEX.PHP
+<?php if (get_page_template_slug( $post->ID ) == "some-custom-page-template") {
+ echo "<div id='block'>[I am totally not a block ._.]</div>";
+} else {
+ echo "<p>The current template used is:".get_page_template_slug( $post->ID )."</p>";
+}
?>