summaryrefslogtreecommitdiffstats
path: root/wp-includes/template-loader.php
diff options
context:
space:
mode:
Diffstat (limited to 'wp-includes/template-loader.php')
-rw-r--r--wp-includes/template-loader.php114
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;
+}