diff options
Diffstat (limited to 'wp-includes/template-loader.php')
-rw-r--r-- | wp-includes/template-loader.php | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/wp-includes/template-loader.php b/wp-includes/template-loader.php new file mode 100644 index 0000000..0fd0854 --- /dev/null +++ b/wp-includes/template-loader.php @@ -0,0 +1,114 @@ +<?php +/** + * Loads the correct template based on the visitor's url + * + * @package WordPress + */ +if ( wp_using_themes() ) { + /** + * Fires before determining which template to load. + * + * @since 1.5.0 + */ + do_action( 'template_redirect' ); +} + +/** + * Filters whether to allow 'HEAD' requests to generate content. + * + * Provides a significant performance bump by exiting before the page + * content loads for 'HEAD' requests. See #14348. + * + * @since 3.5.0 + * + * @param bool $exit Whether to exit without generating any content for 'HEAD' requests. Default true. + */ +if ( 'HEAD' === $_SERVER['REQUEST_METHOD'] && apply_filters( 'exit_on_http_head', true ) ) { + exit; +} + +// Process feeds and trackbacks even if not using themes. +if ( is_robots() ) { + /** + * Fired when the template loader determines a robots.txt request. + * + * @since 2.1.0 + */ + do_action( 'do_robots' ); + return; +} elseif ( is_favicon() ) { + /** + * Fired when the template loader determines a favicon.ico request. + * + * @since 5.4.0 + */ + do_action( 'do_favicon' ); + return; +} elseif ( is_feed() ) { + do_feed(); + return; +} elseif ( is_trackback() ) { + require ABSPATH . 'wp-trackback.php'; + return; +} + +if ( wp_using_themes() ) { + + $tag_templates = array( + 'is_embed' => 'get_embed_template', + 'is_404' => 'get_404_template', + 'is_search' => 'get_search_template', + 'is_front_page' => 'get_front_page_template', + 'is_home' => 'get_home_template', + 'is_privacy_policy' => 'get_privacy_policy_template', + 'is_post_type_archive' => 'get_post_type_archive_template', + 'is_tax' => 'get_taxonomy_template', + 'is_attachment' => 'get_attachment_template', + 'is_single' => 'get_single_template', + 'is_page' => 'get_page_template', + 'is_singular' => 'get_singular_template', + 'is_category' => 'get_category_template', + 'is_tag' => 'get_tag_template', + 'is_author' => 'get_author_template', + 'is_date' => 'get_date_template', + 'is_archive' => 'get_archive_template', + ); + $template = false; + + // Loop through each of the template conditionals, and find the appropriate template file. + foreach ( $tag_templates as $tag => $template_getter ) { + if ( call_user_func( $tag ) ) { + $template = call_user_func( $template_getter ); + } + + if ( $template ) { + if ( 'is_attachment' === $tag ) { + remove_filter( 'the_content', 'prepend_attachment' ); + } + + break; + } + } + + if ( ! $template ) { + $template = get_index_template(); + } + + /** + * Filters the path of the current template before including it. + * + * @since 3.0.0 + * + * @param string $template The path of the template to include. + */ + $template = apply_filters( 'template_include', $template ); + if ( $template ) { + include $template; + } elseif ( current_user_can( 'switch_themes' ) ) { + $theme = wp_get_theme(); + if ( $theme->errors() ) { + wp_die( $theme->errors() ); + } + } + return; +} |