2012-02-28 02:49:49 +01:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Template loading functions.
|
|
|
|
*
|
|
|
|
* @package WordPress
|
|
|
|
* @subpackage Template
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path to a template.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
|
|
|
* Used to quickly retrieve the path of a template without including the file
|
|
|
|
* extension. It will also check the parent theme, if the file exists, with
|
2016-05-22 19:39:28 +02:00
|
|
|
* the use of locate_template(). Allows for more generic template location
|
2012-02-28 02:49:49 +01:00
|
|
|
* without the use of the other get_*_template() functions.
|
|
|
|
*
|
|
|
|
* @since 1.5.0
|
|
|
|
*
|
2021-03-07 13:32:09 +01:00
|
|
|
* @param string $type Filename without extension.
|
|
|
|
* @param string[] $templates An optional list of template candidates.
|
2014-01-05 18:55:11 +01:00
|
|
|
* @return string Full path to template file.
|
2012-02-28 02:49:49 +01:00
|
|
|
*/
|
|
|
|
function get_query_template( $type, $templates = array() ) {
|
|
|
|
$type = preg_replace( '|[^a-z0-9-]+|', '', $type );
|
|
|
|
|
2017-12-01 00:11:00 +01:00
|
|
|
if ( empty( $templates ) ) {
|
|
|
|
$templates = array( "{$type}.php" );
|
|
|
|
}
|
2012-02-28 02:49:49 +01:00
|
|
|
|
2016-08-26 23:03:27 +02:00
|
|
|
/**
|
2016-09-14 23:54:30 +02:00
|
|
|
* Filters the list of template filenames that are searched for when retrieving a template to use.
|
2016-08-26 23:03:27 +02:00
|
|
|
*
|
2021-03-07 13:32:09 +01:00
|
|
|
* The dynamic portion of the hook name, `$type`, refers to the filename -- minus the file
|
|
|
|
* extension and any non-alphanumeric characters delimiting words -- of the file to load.
|
2016-08-26 23:03:27 +02:00
|
|
|
* The last element in the array should always be the fallback template for this query type.
|
|
|
|
*
|
2021-03-07 13:32:09 +01:00
|
|
|
* Possible hook names include:
|
|
|
|
*
|
|
|
|
* - `404_template_hierarchy`
|
|
|
|
* - `archive_template_hierarchy`
|
|
|
|
* - `attachment_template_hierarchy`
|
|
|
|
* - `author_template_hierarchy`
|
|
|
|
* - `category_template_hierarchy`
|
|
|
|
* - `date_template_hierarchy`
|
|
|
|
* - `embed_template_hierarchy`
|
|
|
|
* - `frontpage_template_hierarchy`
|
|
|
|
* - `home_template_hierarchy`
|
|
|
|
* - `index_template_hierarchy`
|
|
|
|
* - `page_template_hierarchy`
|
|
|
|
* - `paged_template_hierarchy`
|
|
|
|
* - `privacypolicy_template_hierarchy`
|
|
|
|
* - `search_template_hierarchy`
|
|
|
|
* - `single_template_hierarchy`
|
|
|
|
* - `singular_template_hierarchy`
|
|
|
|
* - `tag_template_hierarchy`
|
|
|
|
* - `taxonomy_template_hierarchy`
|
2016-08-26 23:03:27 +02:00
|
|
|
*
|
|
|
|
* @since 4.7.0
|
|
|
|
*
|
2021-03-07 13:32:09 +01:00
|
|
|
* @param string[] $templates A list of template candidates, in descending order of priority.
|
2016-08-26 23:03:27 +02:00
|
|
|
*/
|
|
|
|
$templates = apply_filters( "{$type}_template_hierarchy", $templates );
|
|
|
|
|
2013-10-06 21:01:09 +02:00
|
|
|
$template = locate_template( $templates );
|
2015-07-14 23:59:25 +02:00
|
|
|
|
2021-05-25 16:20:57 +02:00
|
|
|
$template = locate_block_template( $template, $type, $templates );
|
|
|
|
|
2013-10-06 21:01:09 +02:00
|
|
|
/**
|
2016-05-22 20:50:28 +02:00
|
|
|
* Filters the path of the queried template by type.
|
2013-10-06 21:01:09 +02:00
|
|
|
*
|
2015-07-15 00:12:25 +02:00
|
|
|
* The dynamic portion of the hook name, `$type`, refers to the filename -- minus the file
|
|
|
|
* extension and any non-alphanumeric characters delimiting words -- of the file to load.
|
|
|
|
* This hook also applies to various types of files loaded as part of the Template Hierarchy.
|
2013-10-06 21:01:09 +02:00
|
|
|
*
|
2021-03-07 13:32:09 +01:00
|
|
|
* Possible hook names include:
|
|
|
|
*
|
|
|
|
* - `404_template`
|
|
|
|
* - `archive_template`
|
|
|
|
* - `attachment_template`
|
|
|
|
* - `author_template`
|
|
|
|
* - `category_template`
|
|
|
|
* - `date_template`
|
|
|
|
* - `embed_template`
|
|
|
|
* - `frontpage_template`
|
|
|
|
* - `home_template`
|
|
|
|
* - `index_template`
|
|
|
|
* - `page_template`
|
|
|
|
* - `paged_template`
|
|
|
|
* - `privacypolicy_template`
|
|
|
|
* - `search_template`
|
|
|
|
* - `single_template`
|
|
|
|
* - `singular_template`
|
|
|
|
* - `tag_template`
|
|
|
|
* - `taxonomy_template`
|
2015-10-28 15:06:27 +01:00
|
|
|
*
|
2013-10-30 15:39:10 +01:00
|
|
|
* @since 1.5.0
|
2017-02-12 22:25:42 +01:00
|
|
|
* @since 4.8.0 The `$type` and `$templates` parameters were added.
|
2013-10-06 21:01:09 +02:00
|
|
|
*
|
2021-03-07 13:32:09 +01:00
|
|
|
* @param string $template Path to the template. See locate_template().
|
|
|
|
* @param string $type Sanitized filename without extension.
|
|
|
|
* @param string[] $templates A list of template candidates, in descending order of priority.
|
2013-10-06 21:01:09 +02:00
|
|
|
*/
|
2017-02-12 22:25:42 +01:00
|
|
|
return apply_filters( "{$type}_template", $template, $type, $templates );
|
2012-02-28 02:49:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path of index template in current or parent template.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2017-06-29 18:05:41 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'index'.
|
2014-01-05 18:55:11 +01:00
|
|
|
*
|
2012-02-28 02:49:49 +01:00
|
|
|
* @since 3.0.0
|
|
|
|
*
|
2014-01-05 18:55:11 +01:00
|
|
|
* @see get_query_template()
|
|
|
|
*
|
|
|
|
* @return string Full path to index template file.
|
2012-02-28 02:49:49 +01:00
|
|
|
*/
|
|
|
|
function get_index_template() {
|
2017-12-01 00:11:00 +01:00
|
|
|
return get_query_template( 'index' );
|
2012-02-28 02:49:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path of 404 template in current or parent template.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2017-06-29 18:05:41 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is '404'.
|
2014-01-05 18:55:11 +01:00
|
|
|
*
|
2012-02-28 02:49:49 +01:00
|
|
|
* @since 1.5.0
|
|
|
|
*
|
2014-01-05 18:55:11 +01:00
|
|
|
* @see get_query_template()
|
|
|
|
*
|
|
|
|
* @return string Full path to 404 template file.
|
2012-02-28 02:49:49 +01:00
|
|
|
*/
|
|
|
|
function get_404_template() {
|
2017-12-01 00:11:00 +01:00
|
|
|
return get_query_template( '404' );
|
2012-02-28 02:49:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path of archive template in current or parent template.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2017-06-29 17:47:40 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'archive'.
|
2014-01-05 18:55:11 +01:00
|
|
|
*
|
2012-02-28 02:49:49 +01:00
|
|
|
* @since 1.5.0
|
|
|
|
*
|
2014-01-05 18:55:11 +01:00
|
|
|
* @see get_query_template()
|
|
|
|
*
|
|
|
|
* @return string Full path to archive template file.
|
2012-02-28 02:49:49 +01:00
|
|
|
*/
|
|
|
|
function get_archive_template() {
|
2013-01-03 07:17:47 +01:00
|
|
|
$post_types = array_filter( (array) get_query_var( 'post_type' ) );
|
2012-02-28 02:49:49 +01:00
|
|
|
|
|
|
|
$templates = array();
|
|
|
|
|
Coding Standards: Use strict comparison where `count()` is involved.
Follow-up to [1636], [6974], [8114], [10322], [13326], [14760], [18006], [18541], [19743], [23249], [24115], [33359].
Props aristath, poena, afercia, SergeyBiryukov.
See #57839.
Built from https://develop.svn.wordpress.org/trunk@55642
git-svn-id: http://core.svn.wordpress.org/trunk@55154 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-04-10 14:56:21 +02:00
|
|
|
if ( count( $post_types ) === 1 ) {
|
2017-12-01 00:11:00 +01:00
|
|
|
$post_type = reset( $post_types );
|
2012-02-28 02:49:49 +01:00
|
|
|
$templates[] = "archive-{$post_type}.php";
|
2013-01-03 07:17:47 +01:00
|
|
|
}
|
2012-02-28 02:49:49 +01:00
|
|
|
$templates[] = 'archive.php';
|
|
|
|
|
|
|
|
return get_query_template( 'archive', $templates );
|
|
|
|
}
|
|
|
|
|
2013-09-07 00:07:09 +02:00
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path of post type archive template in current or parent template.
|
2013-09-07 00:07:09 +02:00
|
|
|
*
|
2017-06-29 17:47:40 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'archive'.
|
2014-01-05 18:55:11 +01:00
|
|
|
*
|
2013-09-07 00:07:09 +02:00
|
|
|
* @since 3.7.0
|
|
|
|
*
|
2014-01-05 18:55:11 +01:00
|
|
|
* @see get_archive_template()
|
|
|
|
*
|
|
|
|
* @return string Full path to archive template file.
|
2013-09-07 00:07:09 +02:00
|
|
|
*/
|
|
|
|
function get_post_type_archive_template() {
|
2013-09-10 05:02:10 +02:00
|
|
|
$post_type = get_query_var( 'post_type' );
|
2017-12-01 00:11:00 +01:00
|
|
|
if ( is_array( $post_type ) ) {
|
2013-09-10 05:02:10 +02:00
|
|
|
$post_type = reset( $post_type );
|
2017-12-01 00:11:00 +01:00
|
|
|
}
|
2013-09-12 07:32:10 +02:00
|
|
|
|
2013-09-10 05:02:10 +02:00
|
|
|
$obj = get_post_type_object( $post_type );
|
2017-01-30 20:32:42 +01:00
|
|
|
if ( ! ( $obj instanceof WP_Post_Type ) || ! $obj->has_archive ) {
|
2013-09-07 00:07:09 +02:00
|
|
|
return '';
|
2017-01-30 20:32:42 +01:00
|
|
|
}
|
2013-09-07 00:07:09 +02:00
|
|
|
|
|
|
|
return get_archive_template();
|
|
|
|
}
|
|
|
|
|
2012-02-28 02:49:49 +01:00
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path of author template in current or parent template.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2016-10-14 16:20:29 +02:00
|
|
|
* The hierarchy for this template looks like:
|
|
|
|
*
|
|
|
|
* 1. author-{nicename}.php
|
|
|
|
* 2. author-{id}.php
|
|
|
|
* 3. author.php
|
|
|
|
*
|
|
|
|
* An example of this is:
|
|
|
|
*
|
|
|
|
* 1. author-john.php
|
|
|
|
* 2. author-1.php
|
|
|
|
* 3. author.php
|
|
|
|
*
|
2017-06-29 18:05:41 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'author'.
|
2014-01-05 18:55:11 +01:00
|
|
|
*
|
2012-02-28 02:49:49 +01:00
|
|
|
* @since 1.5.0
|
|
|
|
*
|
2014-01-05 18:55:11 +01:00
|
|
|
* @see get_query_template()
|
|
|
|
*
|
|
|
|
* @return string Full path to author template file.
|
2012-02-28 02:49:49 +01:00
|
|
|
*/
|
|
|
|
function get_author_template() {
|
|
|
|
$author = get_queried_object();
|
|
|
|
|
|
|
|
$templates = array();
|
|
|
|
|
2015-01-16 02:06:24 +01:00
|
|
|
if ( $author instanceof WP_User ) {
|
2012-10-25 14:54:50 +02:00
|
|
|
$templates[] = "author-{$author->user_nicename}.php";
|
|
|
|
$templates[] = "author-{$author->ID}.php";
|
|
|
|
}
|
2012-02-28 02:49:49 +01:00
|
|
|
$templates[] = 'author.php';
|
|
|
|
|
|
|
|
return get_query_template( 'author', $templates );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path of category template in current or parent template.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2016-10-14 16:20:29 +02:00
|
|
|
* The hierarchy for this template looks like:
|
|
|
|
*
|
|
|
|
* 1. category-{slug}.php
|
|
|
|
* 2. category-{id}.php
|
|
|
|
* 3. category.php
|
|
|
|
*
|
|
|
|
* An example of this is:
|
|
|
|
*
|
|
|
|
* 1. category-news.php
|
|
|
|
* 2. category-2.php
|
|
|
|
* 3. category.php
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2017-06-29 18:05:41 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'category'.
|
2014-01-05 18:55:11 +01:00
|
|
|
*
|
2012-02-28 02:49:49 +01:00
|
|
|
* @since 1.5.0
|
2016-10-14 16:20:29 +02:00
|
|
|
* @since 4.7.0 The decoded form of `category-{slug}.php` was added to the top of the
|
|
|
|
* template hierarchy when the category slug contains multibyte characters.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2014-01-05 18:55:11 +01:00
|
|
|
* @see get_query_template()
|
|
|
|
*
|
|
|
|
* @return string Full path to category template file.
|
2012-02-28 02:49:49 +01:00
|
|
|
*/
|
|
|
|
function get_category_template() {
|
|
|
|
$category = get_queried_object();
|
|
|
|
|
|
|
|
$templates = array();
|
|
|
|
|
2013-09-12 07:32:10 +02:00
|
|
|
if ( ! empty( $category->slug ) ) {
|
2016-09-09 02:48:28 +02:00
|
|
|
|
|
|
|
$slug_decoded = urldecode( $category->slug );
|
|
|
|
if ( $slug_decoded !== $category->slug ) {
|
|
|
|
$templates[] = "category-{$slug_decoded}.php";
|
|
|
|
}
|
|
|
|
|
2012-10-25 14:54:50 +02:00
|
|
|
$templates[] = "category-{$category->slug}.php";
|
|
|
|
$templates[] = "category-{$category->term_id}.php";
|
|
|
|
}
|
2012-02-28 02:49:49 +01:00
|
|
|
$templates[] = 'category.php';
|
|
|
|
|
|
|
|
return get_query_template( 'category', $templates );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path of tag template in current or parent template.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2016-10-14 16:20:29 +02:00
|
|
|
* The hierarchy for this template looks like:
|
|
|
|
*
|
|
|
|
* 1. tag-{slug}.php
|
|
|
|
* 2. tag-{id}.php
|
|
|
|
* 3. tag.php
|
|
|
|
*
|
|
|
|
* An example of this is:
|
|
|
|
*
|
|
|
|
* 1. tag-wordpress.php
|
|
|
|
* 2. tag-3.php
|
|
|
|
* 3. tag.php
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2017-06-29 18:05:41 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'tag'.
|
2014-01-05 18:55:11 +01:00
|
|
|
*
|
2012-02-28 02:49:49 +01:00
|
|
|
* @since 2.3.0
|
2016-10-14 16:20:29 +02:00
|
|
|
* @since 4.7.0 The decoded form of `tag-{slug}.php` was added to the top of the
|
|
|
|
* template hierarchy when the tag slug contains multibyte characters.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2014-01-05 18:55:11 +01:00
|
|
|
* @see get_query_template()
|
|
|
|
*
|
|
|
|
* @return string Full path to tag template file.
|
2012-02-28 02:49:49 +01:00
|
|
|
*/
|
|
|
|
function get_tag_template() {
|
|
|
|
$tag = get_queried_object();
|
|
|
|
|
|
|
|
$templates = array();
|
|
|
|
|
2013-09-12 07:32:10 +02:00
|
|
|
if ( ! empty( $tag->slug ) ) {
|
2016-09-09 02:48:28 +02:00
|
|
|
|
|
|
|
$slug_decoded = urldecode( $tag->slug );
|
|
|
|
if ( $slug_decoded !== $tag->slug ) {
|
|
|
|
$templates[] = "tag-{$slug_decoded}.php";
|
|
|
|
}
|
|
|
|
|
2012-10-25 14:54:50 +02:00
|
|
|
$templates[] = "tag-{$tag->slug}.php";
|
|
|
|
$templates[] = "tag-{$tag->term_id}.php";
|
|
|
|
}
|
2012-02-28 02:49:49 +01:00
|
|
|
$templates[] = 'tag.php';
|
|
|
|
|
|
|
|
return get_query_template( 'tag', $templates );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path of custom taxonomy term template in current or parent template.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2016-10-14 16:20:29 +02:00
|
|
|
* The hierarchy for this template looks like:
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2016-10-14 16:20:29 +02:00
|
|
|
* 1. taxonomy-{taxonomy_slug}-{term_slug}.php
|
|
|
|
* 2. taxonomy-{taxonomy_slug}.php
|
|
|
|
* 3. taxonomy.php
|
|
|
|
*
|
|
|
|
* An example of this is:
|
|
|
|
*
|
|
|
|
* 1. taxonomy-location-texas.php
|
|
|
|
* 2. taxonomy-location.php
|
|
|
|
* 3. taxonomy.php
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2017-06-29 18:05:41 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'taxonomy'.
|
2014-01-05 18:55:11 +01:00
|
|
|
*
|
2012-02-28 02:49:49 +01:00
|
|
|
* @since 2.5.0
|
2016-10-14 16:20:29 +02:00
|
|
|
* @since 4.7.0 The decoded form of `taxonomy-{taxonomy_slug}-{term_slug}.php` was added to the top of the
|
|
|
|
* template hierarchy when the term slug contains multibyte characters.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2014-01-05 18:55:11 +01:00
|
|
|
* @see get_query_template()
|
|
|
|
*
|
2016-10-14 16:20:29 +02:00
|
|
|
* @return string Full path to custom taxonomy term template file.
|
2012-02-28 02:49:49 +01:00
|
|
|
*/
|
|
|
|
function get_taxonomy_template() {
|
|
|
|
$term = get_queried_object();
|
|
|
|
|
|
|
|
$templates = array();
|
|
|
|
|
2013-09-12 07:32:10 +02:00
|
|
|
if ( ! empty( $term->slug ) ) {
|
2012-10-25 14:54:50 +02:00
|
|
|
$taxonomy = $term->taxonomy;
|
2016-09-09 02:48:28 +02:00
|
|
|
|
|
|
|
$slug_decoded = urldecode( $term->slug );
|
|
|
|
if ( $slug_decoded !== $term->slug ) {
|
|
|
|
$templates[] = "taxonomy-$taxonomy-{$slug_decoded}.php";
|
|
|
|
}
|
|
|
|
|
2012-10-25 14:54:50 +02:00
|
|
|
$templates[] = "taxonomy-$taxonomy-{$term->slug}.php";
|
|
|
|
$templates[] = "taxonomy-$taxonomy.php";
|
|
|
|
}
|
2012-02-28 02:49:49 +01:00
|
|
|
$templates[] = 'taxonomy.php';
|
|
|
|
|
|
|
|
return get_query_template( 'taxonomy', $templates );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path of date template in current or parent template.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2017-06-29 18:05:41 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'date'.
|
2014-01-05 18:55:11 +01:00
|
|
|
*
|
2012-02-28 02:49:49 +01:00
|
|
|
* @since 1.5.0
|
|
|
|
*
|
2014-01-05 18:55:11 +01:00
|
|
|
* @see get_query_template()
|
|
|
|
*
|
|
|
|
* @return string Full path to date template file.
|
2012-02-28 02:49:49 +01:00
|
|
|
*/
|
|
|
|
function get_date_template() {
|
2017-12-01 00:11:00 +01:00
|
|
|
return get_query_template( 'date' );
|
2012-02-28 02:49:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path of home template in current or parent template.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2017-06-29 18:05:41 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'home'.
|
2014-01-05 18:55:11 +01:00
|
|
|
*
|
2012-02-28 02:49:49 +01:00
|
|
|
* @since 1.5.0
|
|
|
|
*
|
2014-01-05 18:55:11 +01:00
|
|
|
* @see get_query_template()
|
|
|
|
*
|
|
|
|
* @return string Full path to home template file.
|
2012-02-28 02:49:49 +01:00
|
|
|
*/
|
|
|
|
function get_home_template() {
|
|
|
|
$templates = array( 'home.php', 'index.php' );
|
|
|
|
|
|
|
|
return get_query_template( 'home', $templates );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path of front page template in current or parent template.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2017-06-29 18:05:41 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'frontpage'.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
|
|
|
* @since 3.0.0
|
|
|
|
*
|
2014-01-05 18:55:11 +01:00
|
|
|
* @see get_query_template()
|
|
|
|
*
|
|
|
|
* @return string Full path to front page template file.
|
2012-02-28 02:49:49 +01:00
|
|
|
*/
|
|
|
|
function get_front_page_template() {
|
2017-12-01 00:11:00 +01:00
|
|
|
$templates = array( 'front-page.php' );
|
2012-02-28 02:49:49 +01:00
|
|
|
|
2019-04-17 14:58:51 +02:00
|
|
|
return get_query_template( 'frontpage', $templates );
|
2012-02-28 02:49:49 +01:00
|
|
|
}
|
|
|
|
|
2019-03-21 20:48:50 +01:00
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path of Privacy Policy page template in current or parent template.
|
2019-03-21 20:48:50 +01:00
|
|
|
*
|
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'privacypolicy'.
|
|
|
|
*
|
|
|
|
* @since 5.2.0
|
|
|
|
*
|
|
|
|
* @see get_query_template()
|
|
|
|
*
|
2019-04-19 15:46:51 +02:00
|
|
|
* @return string Full path to privacy policy template file.
|
2019-03-21 20:48:50 +01:00
|
|
|
*/
|
|
|
|
function get_privacy_policy_template() {
|
|
|
|
$templates = array( 'privacy-policy.php' );
|
|
|
|
|
2019-04-17 14:58:51 +02:00
|
|
|
return get_query_template( 'privacypolicy', $templates );
|
2019-03-21 20:48:50 +01:00
|
|
|
}
|
|
|
|
|
2012-02-28 02:49:49 +01:00
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path of page template in current or parent template.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2022-11-02 20:52:18 +01:00
|
|
|
* Note: For block themes, use locate_block_template() function instead.
|
2022-09-15 14:44:09 +02:00
|
|
|
*
|
2016-10-14 16:20:29 +02:00
|
|
|
* The hierarchy for this template looks like:
|
|
|
|
*
|
|
|
|
* 1. {Page Template}.php
|
|
|
|
* 2. page-{page_name}.php
|
|
|
|
* 3. page-{id}.php
|
|
|
|
* 4. page.php
|
|
|
|
*
|
|
|
|
* An example of this is:
|
|
|
|
*
|
|
|
|
* 1. page-templates/full-width.php
|
|
|
|
* 2. page-about.php
|
|
|
|
* 3. page-4.php
|
|
|
|
* 4. page.php
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2017-06-29 18:05:41 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'page'.
|
2014-01-05 18:55:11 +01:00
|
|
|
*
|
2012-02-28 02:49:49 +01:00
|
|
|
* @since 1.5.0
|
2016-10-14 16:20:29 +02:00
|
|
|
* @since 4.7.0 The decoded form of `page-{page_name}.php` was added to the top of the
|
|
|
|
* template hierarchy when the page name contains multibyte characters.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2014-01-05 18:55:11 +01:00
|
|
|
* @see get_query_template()
|
|
|
|
*
|
|
|
|
* @return string Full path to page template file.
|
2012-02-28 02:49:49 +01:00
|
|
|
*/
|
|
|
|
function get_page_template() {
|
2017-12-01 00:11:00 +01:00
|
|
|
$id = get_queried_object_id();
|
2012-03-02 19:56:54 +01:00
|
|
|
$template = get_page_template_slug();
|
2017-12-01 00:11:00 +01:00
|
|
|
$pagename = get_query_var( 'pagename' );
|
2012-02-28 02:49:49 +01:00
|
|
|
|
2012-03-02 19:56:54 +01:00
|
|
|
if ( ! $pagename && $id ) {
|
2020-01-29 01:45:18 +01:00
|
|
|
// If a static page is set as the front page, $pagename will not be set.
|
|
|
|
// Retrieve it from the queried object.
|
2012-02-28 02:49:49 +01:00
|
|
|
$post = get_queried_object();
|
2017-12-01 00:11:00 +01:00
|
|
|
if ( $post ) {
|
2013-09-10 04:28:11 +02:00
|
|
|
$pagename = $post->post_name;
|
2017-12-01 00:11:00 +01:00
|
|
|
}
|
2012-02-28 02:49:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
$templates = array();
|
2017-12-01 00:11:00 +01:00
|
|
|
if ( $template && 0 === validate_file( $template ) ) {
|
2012-02-28 02:49:49 +01:00
|
|
|
$templates[] = $template;
|
2017-12-01 00:11:00 +01:00
|
|
|
}
|
2016-09-09 02:48:28 +02:00
|
|
|
if ( $pagename ) {
|
|
|
|
$pagename_decoded = urldecode( $pagename );
|
|
|
|
if ( $pagename_decoded !== $pagename ) {
|
|
|
|
$templates[] = "page-{$pagename_decoded}.php";
|
|
|
|
}
|
2017-01-12 05:13:42 +01:00
|
|
|
$templates[] = "page-{$pagename}.php";
|
2016-09-09 02:48:28 +02:00
|
|
|
}
|
2017-12-01 00:11:00 +01:00
|
|
|
if ( $id ) {
|
2017-01-12 05:13:42 +01:00
|
|
|
$templates[] = "page-{$id}.php";
|
2017-12-01 00:11:00 +01:00
|
|
|
}
|
2012-02-28 02:49:49 +01:00
|
|
|
$templates[] = 'page.php';
|
|
|
|
|
|
|
|
return get_query_template( 'page', $templates );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path of search template in current or parent template.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2017-06-29 18:05:41 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'search'.
|
2014-01-05 18:55:11 +01:00
|
|
|
*
|
2012-02-28 02:49:49 +01:00
|
|
|
* @since 1.5.0
|
|
|
|
*
|
2014-01-05 18:55:11 +01:00
|
|
|
* @see get_query_template()
|
|
|
|
*
|
|
|
|
* @return string Full path to search template file.
|
2012-02-28 02:49:49 +01:00
|
|
|
*/
|
|
|
|
function get_search_template() {
|
2017-12-01 00:11:00 +01:00
|
|
|
return get_query_template( 'search' );
|
2012-02-28 02:49:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path of single template in current or parent template. Applies to single Posts,
|
2016-10-14 16:20:29 +02:00
|
|
|
* single Attachments, and single custom post types.
|
|
|
|
*
|
|
|
|
* The hierarchy for this template looks like:
|
|
|
|
*
|
Posts, Post Types: Add support for post type templates.
WordPress has supported custom page templates for over 12 years, allowing developers to create various layouts for specific pages.
While this feature is very helpful, it has always been limited to the 'page' post type and not was not available to other post types.
By opening up the page template functionality to all post types, we continue to improve the template hierarchy's flexibility.
In addition to the `Template Name` file header, the post types supported by a template can be specified using `Template Post Type: post, foo, bar`.
When at least one template exists for a post type, the 'Post Attributes' meta box will be displayed in the back end, without the need to add post type support for `'page-attributes'`. 'Post Attributes' can be customized per post type using the `'attributes'` label when registering a post type.
Props johnbillion, Mte90, dipesh.kakadiya, swissspidy.
Fixes #18375.
Built from https://develop.svn.wordpress.org/trunk@38951
git-svn-id: http://core.svn.wordpress.org/trunk@38894 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-26 10:07:30 +02:00
|
|
|
* 1. {Post Type Template}.php
|
|
|
|
* 2. single-{post_type}-{post_name}.php
|
|
|
|
* 3. single-{post_type}.php
|
|
|
|
* 4. single.php
|
2016-10-14 16:20:29 +02:00
|
|
|
*
|
|
|
|
* An example of this is:
|
|
|
|
*
|
Posts, Post Types: Add support for post type templates.
WordPress has supported custom page templates for over 12 years, allowing developers to create various layouts for specific pages.
While this feature is very helpful, it has always been limited to the 'page' post type and not was not available to other post types.
By opening up the page template functionality to all post types, we continue to improve the template hierarchy's flexibility.
In addition to the `Template Name` file header, the post types supported by a template can be specified using `Template Post Type: post, foo, bar`.
When at least one template exists for a post type, the 'Post Attributes' meta box will be displayed in the back end, without the need to add post type support for `'page-attributes'`. 'Post Attributes' can be customized per post type using the `'attributes'` label when registering a post type.
Props johnbillion, Mte90, dipesh.kakadiya, swissspidy.
Fixes #18375.
Built from https://develop.svn.wordpress.org/trunk@38951
git-svn-id: http://core.svn.wordpress.org/trunk@38894 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-26 10:07:30 +02:00
|
|
|
* 1. templates/full-width.php
|
|
|
|
* 2. single-post-hello-world.php
|
|
|
|
* 3. single-post.php
|
|
|
|
* 4. single.php
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2017-06-29 18:05:41 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'single'.
|
2014-01-05 18:55:11 +01:00
|
|
|
*
|
2012-02-28 02:49:49 +01:00
|
|
|
* @since 1.5.0
|
2015-10-03 17:00:25 +02:00
|
|
|
* @since 4.4.0 `single-{post_type}-{post_name}.php` was added to the top of the template hierarchy.
|
2016-10-14 16:20:29 +02:00
|
|
|
* @since 4.7.0 The decoded form of `single-{post_type}-{post_name}.php` was added to the top of the
|
|
|
|
* template hierarchy when the post name contains multibyte characters.
|
2018-02-09 17:55:31 +01:00
|
|
|
* @since 4.7.0 `{Post Type Template}.php` was added to the top of the template hierarchy.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2014-01-05 18:55:11 +01:00
|
|
|
* @see get_query_template()
|
|
|
|
*
|
|
|
|
* @return string Full path to single template file.
|
2012-02-28 02:49:49 +01:00
|
|
|
*/
|
|
|
|
function get_single_template() {
|
|
|
|
$object = get_queried_object();
|
|
|
|
|
|
|
|
$templates = array();
|
|
|
|
|
2015-10-03 17:00:25 +02:00
|
|
|
if ( ! empty( $object->post_type ) ) {
|
Posts, Post Types: Add support for post type templates.
WordPress has supported custom page templates for over 12 years, allowing developers to create various layouts for specific pages.
While this feature is very helpful, it has always been limited to the 'page' post type and not was not available to other post types.
By opening up the page template functionality to all post types, we continue to improve the template hierarchy's flexibility.
In addition to the `Template Name` file header, the post types supported by a template can be specified using `Template Post Type: post, foo, bar`.
When at least one template exists for a post type, the 'Post Attributes' meta box will be displayed in the back end, without the need to add post type support for `'page-attributes'`. 'Post Attributes' can be customized per post type using the `'attributes'` label when registering a post type.
Props johnbillion, Mte90, dipesh.kakadiya, swissspidy.
Fixes #18375.
Built from https://develop.svn.wordpress.org/trunk@38951
git-svn-id: http://core.svn.wordpress.org/trunk@38894 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-10-26 10:07:30 +02:00
|
|
|
$template = get_page_template_slug( $object );
|
|
|
|
if ( $template && 0 === validate_file( $template ) ) {
|
|
|
|
$templates[] = $template;
|
|
|
|
}
|
2016-09-09 02:48:28 +02:00
|
|
|
|
|
|
|
$name_decoded = urldecode( $object->post_name );
|
|
|
|
if ( $name_decoded !== $object->post_name ) {
|
|
|
|
$templates[] = "single-{$object->post_type}-{$name_decoded}.php";
|
|
|
|
}
|
|
|
|
|
2015-10-03 17:00:25 +02:00
|
|
|
$templates[] = "single-{$object->post_type}-{$object->post_name}.php";
|
2012-10-25 14:54:50 +02:00
|
|
|
$templates[] = "single-{$object->post_type}.php";
|
2015-10-03 17:00:25 +02:00
|
|
|
}
|
|
|
|
|
2017-12-01 00:11:00 +01:00
|
|
|
$templates[] = 'single.php';
|
2012-02-28 02:49:49 +01:00
|
|
|
|
|
|
|
return get_query_template( 'single', $templates );
|
|
|
|
}
|
|
|
|
|
2016-03-07 20:33:26 +01:00
|
|
|
/**
|
2016-03-10 23:45:26 +01:00
|
|
|
* Retrieves an embed template path in the current or parent template.
|
2016-03-10 23:09:26 +01:00
|
|
|
*
|
2016-10-14 16:20:29 +02:00
|
|
|
* The hierarchy for this template looks like:
|
|
|
|
*
|
|
|
|
* 1. embed-{post_type}-{post_format}.php
|
|
|
|
* 2. embed-{post_type}.php
|
|
|
|
* 3. embed.php
|
|
|
|
*
|
|
|
|
* An example of this is:
|
|
|
|
*
|
|
|
|
* 1. embed-post-audio.php
|
|
|
|
* 2. embed-post.php
|
|
|
|
* 3. embed.php
|
2016-03-07 20:33:26 +01:00
|
|
|
*
|
2017-06-29 18:05:41 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'embed'.
|
2016-03-07 20:33:26 +01:00
|
|
|
*
|
|
|
|
* @since 4.5.0
|
|
|
|
*
|
|
|
|
* @see get_query_template()
|
|
|
|
*
|
|
|
|
* @return string Full path to embed template file.
|
|
|
|
*/
|
|
|
|
function get_embed_template() {
|
|
|
|
$object = get_queried_object();
|
|
|
|
|
|
|
|
$templates = array();
|
|
|
|
|
|
|
|
if ( ! empty( $object->post_type ) ) {
|
|
|
|
$post_format = get_post_format( $object );
|
|
|
|
if ( $post_format ) {
|
|
|
|
$templates[] = "embed-{$object->post_type}-{$post_format}.php";
|
|
|
|
}
|
|
|
|
$templates[] = "embed-{$object->post_type}.php";
|
|
|
|
}
|
|
|
|
|
2017-12-01 00:11:00 +01:00
|
|
|
$templates[] = 'embed.php';
|
2016-03-07 20:33:26 +01:00
|
|
|
|
|
|
|
return get_query_template( 'embed', $templates );
|
|
|
|
}
|
|
|
|
|
2015-06-18 21:01:26 +02:00
|
|
|
/**
|
2015-07-13 23:59:24 +02:00
|
|
|
* Retrieves the path of the singular template in current or parent template.
|
2015-06-18 21:01:26 +02:00
|
|
|
*
|
2017-06-29 18:05:41 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'singular'.
|
2015-06-18 21:01:26 +02:00
|
|
|
*
|
|
|
|
* @since 4.3.0
|
|
|
|
*
|
|
|
|
* @see get_query_template()
|
|
|
|
*
|
|
|
|
* @return string Full path to singular template file
|
|
|
|
*/
|
|
|
|
function get_singular_template() {
|
|
|
|
return get_query_template( 'singular' );
|
|
|
|
}
|
|
|
|
|
2012-02-28 02:49:49 +01:00
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves path of attachment template in current or parent template.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2016-10-14 16:20:29 +02:00
|
|
|
* The hierarchy for this template looks like:
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2016-10-14 16:20:29 +02:00
|
|
|
* 1. {mime_type}-{sub_type}.php
|
|
|
|
* 2. {sub_type}.php
|
|
|
|
* 3. {mime_type}.php
|
|
|
|
* 4. attachment.php
|
|
|
|
*
|
|
|
|
* An example of this is:
|
|
|
|
*
|
|
|
|
* 1. image-jpeg.php
|
|
|
|
* 2. jpeg.php
|
|
|
|
* 3. image.php
|
|
|
|
* 4. attachment.php
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2017-06-29 18:05:41 +02:00
|
|
|
* The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
|
|
|
|
* and {@see '$type_template'} dynamic hooks, where `$type` is 'attachment'.
|
2014-01-05 18:55:11 +01:00
|
|
|
*
|
2012-02-28 02:49:49 +01:00
|
|
|
* @since 2.0.0
|
2016-10-14 16:20:29 +02:00
|
|
|
* @since 4.3.0 The order of the mime type logic was reversed so the hierarchy is more logical.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2014-01-05 18:55:11 +01:00
|
|
|
* @see get_query_template()
|
|
|
|
*
|
2015-05-28 00:04:26 +02:00
|
|
|
* @global array $posts
|
|
|
|
*
|
2014-01-05 18:55:11 +01:00
|
|
|
* @return string Full path to attachment template file.
|
2012-02-28 02:49:49 +01:00
|
|
|
*/
|
|
|
|
function get_attachment_template() {
|
2015-06-16 22:50:26 +02:00
|
|
|
$attachment = get_queried_object();
|
|
|
|
|
|
|
|
$templates = array();
|
|
|
|
|
|
|
|
if ( $attachment ) {
|
|
|
|
if ( false !== strpos( $attachment->post_mime_type, '/' ) ) {
|
|
|
|
list( $type, $subtype ) = explode( '/', $attachment->post_mime_type );
|
|
|
|
} else {
|
|
|
|
list( $type, $subtype ) = array( $attachment->post_mime_type, '' );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( ! empty( $subtype ) ) {
|
|
|
|
$templates[] = "{$type}-{$subtype}.php";
|
|
|
|
$templates[] = "{$subtype}.php";
|
2012-10-25 14:54:50 +02:00
|
|
|
}
|
2015-06-16 22:50:26 +02:00
|
|
|
$templates[] = "{$type}.php";
|
2012-10-25 14:54:50 +02:00
|
|
|
}
|
2015-06-16 22:50:26 +02:00
|
|
|
$templates[] = 'attachment.php';
|
2012-10-25 14:54:50 +02:00
|
|
|
|
2015-06-16 22:50:26 +02:00
|
|
|
return get_query_template( 'attachment', $templates );
|
2012-02-28 02:49:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Retrieves the name of the highest priority template file that exists.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2016-02-24 21:57:26 +01:00
|
|
|
* Searches in the STYLESHEETPATH before TEMPLATEPATH and wp-includes/theme-compat
|
|
|
|
* so that themes which inherit from a parent theme can just overload one file.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
|
|
|
* @since 2.7.0
|
Themes: Allow template loading functions to pass additional arguments to the template via the `$args` parameter.
This affects:
* `get_header()`
* `get_footer()`
* `get_sidebar()`
* `get_template_part()`
* `locate_template()`
* `load_template()`
Note: `get_search_form()` already passes additional arguments to the template as of [44956].
Props enrico.sorcinelli, sc0ttkclark, scribu, nacin, wonderboymusic, GeertDD, beatpanda, amaschas, mintindeed, ysalame, caiocrcosta, bigdawggi, julianm, eddiemoya, shawnz, sayedwp, shamai, mboynes, mihai2u, guidobras, Mte90, apedog, stuffradio, overclokk, johnbillion, joyously, afercia, audrasjb, justlevine, SergeyBiryukov.
See #21676.
Built from https://develop.svn.wordpress.org/trunk@48370
git-svn-id: http://core.svn.wordpress.org/trunk@48139 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-07 13:01:59 +02:00
|
|
|
* @since 5.5.0 The `$args` parameter was added.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
|
|
|
* @param string|array $template_names Template file(s) to search for, in order.
|
2015-05-28 00:04:26 +02:00
|
|
|
* @param bool $load If true the template file will be loaded if it is found.
|
Code Modernization: Rename parameters that use reserved keywords in `wp-includes/template.php`.
While using reserved PHP keywords as parameter name labels is allowed, in the context of function calls using named parameters in PHP 8.0+, this will easily lead to confusion. To avoid that, it is recommended not to use reserved keywords as function parameter names.
This commit renames the `$require_once` parameter to `$load_once` in:
* `locate_template()`
* `load_template()`
Follow-up to [52946], [52996], [52997], [52998], [53003], [53014], [53029], [53039], [53116], [53117], [53137], [53174], [53184], [53185], [53192], [53193], [53198], [53203], [53207], [53215], [53216], [53220], [53230], [53232], [53236], [53239], [53240], [53242], [53243], [53245], [53246], [53257], [53269], [53270], [53271], [53272], [53273], [53274], [53275], [53276], [53277], [53281], [53283], [53284], [53285], [53287], [53364], [53365], [54927], [54929], [54930], [54931], [54932], [54933], [54938], [54943], [54944], [54945], [54946], [54947], [54948], [54950], [54951], [54952], [54956], [54959], [54960], [54961], [54962], [54964], [54965], [54969], [54970], [54971], [54972], [54996], [55000], [55011].
Props jrf, aristath, poena, justinahinon, SergeyBiryukov.
See #56788.
Built from https://develop.svn.wordpress.org/trunk@55013
git-svn-id: http://core.svn.wordpress.org/trunk@54546 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-12-22 12:08:19 +01:00
|
|
|
* @param bool $load_once Whether to require_once or require. Has no effect if `$load` is false.
|
Themes: Allow template loading functions to pass additional arguments to the template via the `$args` parameter.
This affects:
* `get_header()`
* `get_footer()`
* `get_sidebar()`
* `get_template_part()`
* `locate_template()`
* `load_template()`
Note: `get_search_form()` already passes additional arguments to the template as of [44956].
Props enrico.sorcinelli, sc0ttkclark, scribu, nacin, wonderboymusic, GeertDD, beatpanda, amaschas, mintindeed, ysalame, caiocrcosta, bigdawggi, julianm, eddiemoya, shawnz, sayedwp, shamai, mboynes, mihai2u, guidobras, Mte90, apedog, stuffradio, overclokk, johnbillion, joyously, afercia, audrasjb, justlevine, SergeyBiryukov.
See #21676.
Built from https://develop.svn.wordpress.org/trunk@48370
git-svn-id: http://core.svn.wordpress.org/trunk@48139 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-07 13:01:59 +02:00
|
|
|
* Default true.
|
|
|
|
* @param array $args Optional. Additional arguments passed to the template.
|
|
|
|
* Default empty array.
|
2012-02-28 02:49:49 +01:00
|
|
|
* @return string The template filename if one is located.
|
|
|
|
*/
|
Code Modernization: Rename parameters that use reserved keywords in `wp-includes/template.php`.
While using reserved PHP keywords as parameter name labels is allowed, in the context of function calls using named parameters in PHP 8.0+, this will easily lead to confusion. To avoid that, it is recommended not to use reserved keywords as function parameter names.
This commit renames the `$require_once` parameter to `$load_once` in:
* `locate_template()`
* `load_template()`
Follow-up to [52946], [52996], [52997], [52998], [53003], [53014], [53029], [53039], [53116], [53117], [53137], [53174], [53184], [53185], [53192], [53193], [53198], [53203], [53207], [53215], [53216], [53220], [53230], [53232], [53236], [53239], [53240], [53242], [53243], [53245], [53246], [53257], [53269], [53270], [53271], [53272], [53273], [53274], [53275], [53276], [53277], [53281], [53283], [53284], [53285], [53287], [53364], [53365], [54927], [54929], [54930], [54931], [54932], [54933], [54938], [54943], [54944], [54945], [54946], [54947], [54948], [54950], [54951], [54952], [54956], [54959], [54960], [54961], [54962], [54964], [54965], [54969], [54970], [54971], [54972], [54996], [55000], [55011].
Props jrf, aristath, poena, justinahinon, SergeyBiryukov.
See #56788.
Built from https://develop.svn.wordpress.org/trunk@55013
git-svn-id: http://core.svn.wordpress.org/trunk@54546 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-12-22 12:08:19 +01:00
|
|
|
function locate_template( $template_names, $load = false, $load_once = true, $args = array() ) {
|
2012-02-28 02:49:49 +01:00
|
|
|
$located = '';
|
|
|
|
foreach ( (array) $template_names as $template_name ) {
|
2017-12-01 00:11:00 +01:00
|
|
|
if ( ! $template_name ) {
|
2012-02-28 02:49:49 +01:00
|
|
|
continue;
|
2017-12-01 00:11:00 +01:00
|
|
|
}
|
|
|
|
if ( file_exists( STYLESHEETPATH . '/' . $template_name ) ) {
|
2014-07-09 20:07:16 +02:00
|
|
|
$located = STYLESHEETPATH . '/' . $template_name;
|
2012-02-28 02:49:49 +01:00
|
|
|
break;
|
2017-12-01 00:11:00 +01:00
|
|
|
} elseif ( file_exists( TEMPLATEPATH . '/' . $template_name ) ) {
|
2014-07-09 20:07:16 +02:00
|
|
|
$located = TEMPLATEPATH . '/' . $template_name;
|
2012-02-28 02:49:49 +01:00
|
|
|
break;
|
2016-02-24 21:57:26 +01:00
|
|
|
} elseif ( file_exists( ABSPATH . WPINC . '/theme-compat/' . $template_name ) ) {
|
|
|
|
$located = ABSPATH . WPINC . '/theme-compat/' . $template_name;
|
|
|
|
break;
|
2012-02-28 02:49:49 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-05-16 20:42:12 +02:00
|
|
|
if ( $load && '' !== $located ) {
|
Code Modernization: Rename parameters that use reserved keywords in `wp-includes/template.php`.
While using reserved PHP keywords as parameter name labels is allowed, in the context of function calls using named parameters in PHP 8.0+, this will easily lead to confusion. To avoid that, it is recommended not to use reserved keywords as function parameter names.
This commit renames the `$require_once` parameter to `$load_once` in:
* `locate_template()`
* `load_template()`
Follow-up to [52946], [52996], [52997], [52998], [53003], [53014], [53029], [53039], [53116], [53117], [53137], [53174], [53184], [53185], [53192], [53193], [53198], [53203], [53207], [53215], [53216], [53220], [53230], [53232], [53236], [53239], [53240], [53242], [53243], [53245], [53246], [53257], [53269], [53270], [53271], [53272], [53273], [53274], [53275], [53276], [53277], [53281], [53283], [53284], [53285], [53287], [53364], [53365], [54927], [54929], [54930], [54931], [54932], [54933], [54938], [54943], [54944], [54945], [54946], [54947], [54948], [54950], [54951], [54952], [54956], [54959], [54960], [54961], [54962], [54964], [54965], [54969], [54970], [54971], [54972], [54996], [55000], [55011].
Props jrf, aristath, poena, justinahinon, SergeyBiryukov.
See #56788.
Built from https://develop.svn.wordpress.org/trunk@55013
git-svn-id: http://core.svn.wordpress.org/trunk@54546 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-12-22 12:08:19 +01:00
|
|
|
load_template( $located, $load_once, $args );
|
2017-12-01 00:11:00 +01:00
|
|
|
}
|
2012-02-28 02:49:49 +01:00
|
|
|
|
|
|
|
return $located;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-09-15 14:49:08 +02:00
|
|
|
* Requires the template file with WordPress environment.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
|
|
|
* The globals are set up for the template file to ensure that the WordPress
|
|
|
|
* environment is available from within the function. The query variables are
|
|
|
|
* also available.
|
|
|
|
*
|
|
|
|
* @since 1.5.0
|
Themes: Allow template loading functions to pass additional arguments to the template via the `$args` parameter.
This affects:
* `get_header()`
* `get_footer()`
* `get_sidebar()`
* `get_template_part()`
* `locate_template()`
* `load_template()`
Note: `get_search_form()` already passes additional arguments to the template as of [44956].
Props enrico.sorcinelli, sc0ttkclark, scribu, nacin, wonderboymusic, GeertDD, beatpanda, amaschas, mintindeed, ysalame, caiocrcosta, bigdawggi, julianm, eddiemoya, shawnz, sayedwp, shamai, mboynes, mihai2u, guidobras, Mte90, apedog, stuffradio, overclokk, johnbillion, joyously, afercia, audrasjb, justlevine, SergeyBiryukov.
See #21676.
Built from https://develop.svn.wordpress.org/trunk@48370
git-svn-id: http://core.svn.wordpress.org/trunk@48139 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-07 13:01:59 +02:00
|
|
|
* @since 5.5.0 The `$args` parameter was added.
|
2012-02-28 02:49:49 +01:00
|
|
|
*
|
2015-05-28 00:04:26 +02:00
|
|
|
* @global array $posts
|
2019-08-04 14:28:56 +02:00
|
|
|
* @global WP_Post $post Global post object.
|
2015-05-28 00:04:26 +02:00
|
|
|
* @global bool $wp_did_header
|
2019-08-04 03:59:56 +02:00
|
|
|
* @global WP_Query $wp_query WordPress Query object.
|
2019-08-04 03:19:56 +02:00
|
|
|
* @global WP_Rewrite $wp_rewrite WordPress rewrite component.
|
2019-08-04 03:12:56 +02:00
|
|
|
* @global wpdb $wpdb WordPress database abstraction object.
|
2015-05-28 00:04:26 +02:00
|
|
|
* @global string $wp_version
|
2019-08-04 03:28:55 +02:00
|
|
|
* @global WP $wp Current WordPress environment instance.
|
2015-05-28 00:04:26 +02:00
|
|
|
* @global int $id
|
2019-10-05 00:19:57 +02:00
|
|
|
* @global WP_Comment $comment Global comment object.
|
2015-05-28 00:04:26 +02:00
|
|
|
* @global int $user_ID
|
|
|
|
*
|
2012-02-28 02:49:49 +01:00
|
|
|
* @param string $_template_file Path to template file.
|
Code Modernization: Rename parameters that use reserved keywords in `wp-includes/template.php`.
While using reserved PHP keywords as parameter name labels is allowed, in the context of function calls using named parameters in PHP 8.0+, this will easily lead to confusion. To avoid that, it is recommended not to use reserved keywords as function parameter names.
This commit renames the `$require_once` parameter to `$load_once` in:
* `locate_template()`
* `load_template()`
Follow-up to [52946], [52996], [52997], [52998], [53003], [53014], [53029], [53039], [53116], [53117], [53137], [53174], [53184], [53185], [53192], [53193], [53198], [53203], [53207], [53215], [53216], [53220], [53230], [53232], [53236], [53239], [53240], [53242], [53243], [53245], [53246], [53257], [53269], [53270], [53271], [53272], [53273], [53274], [53275], [53276], [53277], [53281], [53283], [53284], [53285], [53287], [53364], [53365], [54927], [54929], [54930], [54931], [54932], [54933], [54938], [54943], [54944], [54945], [54946], [54947], [54948], [54950], [54951], [54952], [54956], [54959], [54960], [54961], [54962], [54964], [54965], [54969], [54970], [54971], [54972], [54996], [55000], [55011].
Props jrf, aristath, poena, justinahinon, SergeyBiryukov.
See #56788.
Built from https://develop.svn.wordpress.org/trunk@55013
git-svn-id: http://core.svn.wordpress.org/trunk@54546 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-12-22 12:08:19 +01:00
|
|
|
* @param bool $load_once Whether to require_once or require. Default true.
|
Themes: Allow template loading functions to pass additional arguments to the template via the `$args` parameter.
This affects:
* `get_header()`
* `get_footer()`
* `get_sidebar()`
* `get_template_part()`
* `locate_template()`
* `load_template()`
Note: `get_search_form()` already passes additional arguments to the template as of [44956].
Props enrico.sorcinelli, sc0ttkclark, scribu, nacin, wonderboymusic, GeertDD, beatpanda, amaschas, mintindeed, ysalame, caiocrcosta, bigdawggi, julianm, eddiemoya, shawnz, sayedwp, shamai, mboynes, mihai2u, guidobras, Mte90, apedog, stuffradio, overclokk, johnbillion, joyously, afercia, audrasjb, justlevine, SergeyBiryukov.
See #21676.
Built from https://develop.svn.wordpress.org/trunk@48370
git-svn-id: http://core.svn.wordpress.org/trunk@48139 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-07-07 13:01:59 +02:00
|
|
|
* @param array $args Optional. Additional arguments passed to the template.
|
|
|
|
* Default empty array.
|
2012-02-28 02:49:49 +01:00
|
|
|
*/
|
Code Modernization: Rename parameters that use reserved keywords in `wp-includes/template.php`.
While using reserved PHP keywords as parameter name labels is allowed, in the context of function calls using named parameters in PHP 8.0+, this will easily lead to confusion. To avoid that, it is recommended not to use reserved keywords as function parameter names.
This commit renames the `$require_once` parameter to `$load_once` in:
* `locate_template()`
* `load_template()`
Follow-up to [52946], [52996], [52997], [52998], [53003], [53014], [53029], [53039], [53116], [53117], [53137], [53174], [53184], [53185], [53192], [53193], [53198], [53203], [53207], [53215], [53216], [53220], [53230], [53232], [53236], [53239], [53240], [53242], [53243], [53245], [53246], [53257], [53269], [53270], [53271], [53272], [53273], [53274], [53275], [53276], [53277], [53281], [53283], [53284], [53285], [53287], [53364], [53365], [54927], [54929], [54930], [54931], [54932], [54933], [54938], [54943], [54944], [54945], [54946], [54947], [54948], [54950], [54951], [54952], [54956], [54959], [54960], [54961], [54962], [54964], [54965], [54969], [54970], [54971], [54972], [54996], [55000], [55011].
Props jrf, aristath, poena, justinahinon, SergeyBiryukov.
See #56788.
Built from https://develop.svn.wordpress.org/trunk@55013
git-svn-id: http://core.svn.wordpress.org/trunk@54546 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-12-22 12:08:19 +01:00
|
|
|
function load_template( $_template_file, $load_once = true, $args = array() ) {
|
2012-05-24 09:06:13 +02:00
|
|
|
global $posts, $post, $wp_did_header, $wp_query, $wp_rewrite, $wpdb, $wp_version, $wp, $id, $comment, $user_ID;
|
2012-02-28 02:49:49 +01:00
|
|
|
|
2015-04-27 07:10:27 +02:00
|
|
|
if ( is_array( $wp_query->query_vars ) ) {
|
2019-01-12 04:20:48 +01:00
|
|
|
/*
|
|
|
|
* This use of extract() cannot be removed. There are many possible ways that
|
|
|
|
* templates could depend on variables that it creates existing, and no way to
|
|
|
|
* detect and deprecate it.
|
|
|
|
*
|
|
|
|
* Passing the EXTR_SKIP flag is the safest option, ensuring globals and
|
|
|
|
* function variables cannot be overwritten.
|
|
|
|
*/
|
|
|
|
// phpcs:ignore WordPress.PHP.DontExtract.extract_extract
|
2012-02-28 02:49:49 +01:00
|
|
|
extract( $wp_query->query_vars, EXTR_SKIP );
|
2015-04-27 07:10:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( isset( $s ) ) {
|
|
|
|
$s = esc_attr( $s );
|
|
|
|
}
|
2012-02-28 02:49:49 +01:00
|
|
|
|
2022-09-21 03:09:10 +02:00
|
|
|
/**
|
|
|
|
* Fires before a template file is loaded.
|
|
|
|
*
|
|
|
|
* @since 6.1.0
|
|
|
|
*
|
|
|
|
* @param string $_template_file The full path to the template file.
|
Code Modernization: Rename parameters that use reserved keywords in `wp-includes/template.php`.
While using reserved PHP keywords as parameter name labels is allowed, in the context of function calls using named parameters in PHP 8.0+, this will easily lead to confusion. To avoid that, it is recommended not to use reserved keywords as function parameter names.
This commit renames the `$require_once` parameter to `$load_once` in:
* `locate_template()`
* `load_template()`
Follow-up to [52946], [52996], [52997], [52998], [53003], [53014], [53029], [53039], [53116], [53117], [53137], [53174], [53184], [53185], [53192], [53193], [53198], [53203], [53207], [53215], [53216], [53220], [53230], [53232], [53236], [53239], [53240], [53242], [53243], [53245], [53246], [53257], [53269], [53270], [53271], [53272], [53273], [53274], [53275], [53276], [53277], [53281], [53283], [53284], [53285], [53287], [53364], [53365], [54927], [54929], [54930], [54931], [54932], [54933], [54938], [54943], [54944], [54945], [54946], [54947], [54948], [54950], [54951], [54952], [54956], [54959], [54960], [54961], [54962], [54964], [54965], [54969], [54970], [54971], [54972], [54996], [55000], [55011].
Props jrf, aristath, poena, justinahinon, SergeyBiryukov.
See #56788.
Built from https://develop.svn.wordpress.org/trunk@55013
git-svn-id: http://core.svn.wordpress.org/trunk@54546 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-12-22 12:08:19 +01:00
|
|
|
* @param bool $load_once Whether to require_once or require.
|
2022-09-21 03:09:10 +02:00
|
|
|
* @param array $args Additional arguments passed to the template.
|
|
|
|
*/
|
Code Modernization: Rename parameters that use reserved keywords in `wp-includes/template.php`.
While using reserved PHP keywords as parameter name labels is allowed, in the context of function calls using named parameters in PHP 8.0+, this will easily lead to confusion. To avoid that, it is recommended not to use reserved keywords as function parameter names.
This commit renames the `$require_once` parameter to `$load_once` in:
* `locate_template()`
* `load_template()`
Follow-up to [52946], [52996], [52997], [52998], [53003], [53014], [53029], [53039], [53116], [53117], [53137], [53174], [53184], [53185], [53192], [53193], [53198], [53203], [53207], [53215], [53216], [53220], [53230], [53232], [53236], [53239], [53240], [53242], [53243], [53245], [53246], [53257], [53269], [53270], [53271], [53272], [53273], [53274], [53275], [53276], [53277], [53281], [53283], [53284], [53285], [53287], [53364], [53365], [54927], [54929], [54930], [54931], [54932], [54933], [54938], [54943], [54944], [54945], [54946], [54947], [54948], [54950], [54951], [54952], [54956], [54959], [54960], [54961], [54962], [54964], [54965], [54969], [54970], [54971], [54972], [54996], [55000], [55011].
Props jrf, aristath, poena, justinahinon, SergeyBiryukov.
See #56788.
Built from https://develop.svn.wordpress.org/trunk@55013
git-svn-id: http://core.svn.wordpress.org/trunk@54546 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-12-22 12:08:19 +01:00
|
|
|
do_action( 'wp_before_load_template', $_template_file, $load_once, $args );
|
2022-09-21 03:09:10 +02:00
|
|
|
|
Code Modernization: Rename parameters that use reserved keywords in `wp-includes/template.php`.
While using reserved PHP keywords as parameter name labels is allowed, in the context of function calls using named parameters in PHP 8.0+, this will easily lead to confusion. To avoid that, it is recommended not to use reserved keywords as function parameter names.
This commit renames the `$require_once` parameter to `$load_once` in:
* `locate_template()`
* `load_template()`
Follow-up to [52946], [52996], [52997], [52998], [53003], [53014], [53029], [53039], [53116], [53117], [53137], [53174], [53184], [53185], [53192], [53193], [53198], [53203], [53207], [53215], [53216], [53220], [53230], [53232], [53236], [53239], [53240], [53242], [53243], [53245], [53246], [53257], [53269], [53270], [53271], [53272], [53273], [53274], [53275], [53276], [53277], [53281], [53283], [53284], [53285], [53287], [53364], [53365], [54927], [54929], [54930], [54931], [54932], [54933], [54938], [54943], [54944], [54945], [54946], [54947], [54948], [54950], [54951], [54952], [54956], [54959], [54960], [54961], [54962], [54964], [54965], [54969], [54970], [54971], [54972], [54996], [55000], [55011].
Props jrf, aristath, poena, justinahinon, SergeyBiryukov.
See #56788.
Built from https://develop.svn.wordpress.org/trunk@55013
git-svn-id: http://core.svn.wordpress.org/trunk@54546 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-12-22 12:08:19 +01:00
|
|
|
if ( $load_once ) {
|
2020-02-06 07:33:11 +01:00
|
|
|
require_once $_template_file;
|
2015-04-27 07:10:27 +02:00
|
|
|
} else {
|
2020-02-06 07:33:11 +01:00
|
|
|
require $_template_file;
|
2015-04-27 07:10:27 +02:00
|
|
|
}
|
2022-09-21 03:09:10 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Fires after a template file is loaded.
|
|
|
|
*
|
|
|
|
* @since 6.1.0
|
|
|
|
*
|
|
|
|
* @param string $_template_file The full path to the template file.
|
Code Modernization: Rename parameters that use reserved keywords in `wp-includes/template.php`.
While using reserved PHP keywords as parameter name labels is allowed, in the context of function calls using named parameters in PHP 8.0+, this will easily lead to confusion. To avoid that, it is recommended not to use reserved keywords as function parameter names.
This commit renames the `$require_once` parameter to `$load_once` in:
* `locate_template()`
* `load_template()`
Follow-up to [52946], [52996], [52997], [52998], [53003], [53014], [53029], [53039], [53116], [53117], [53137], [53174], [53184], [53185], [53192], [53193], [53198], [53203], [53207], [53215], [53216], [53220], [53230], [53232], [53236], [53239], [53240], [53242], [53243], [53245], [53246], [53257], [53269], [53270], [53271], [53272], [53273], [53274], [53275], [53276], [53277], [53281], [53283], [53284], [53285], [53287], [53364], [53365], [54927], [54929], [54930], [54931], [54932], [54933], [54938], [54943], [54944], [54945], [54946], [54947], [54948], [54950], [54951], [54952], [54956], [54959], [54960], [54961], [54962], [54964], [54965], [54969], [54970], [54971], [54972], [54996], [55000], [55011].
Props jrf, aristath, poena, justinahinon, SergeyBiryukov.
See #56788.
Built from https://develop.svn.wordpress.org/trunk@55013
git-svn-id: http://core.svn.wordpress.org/trunk@54546 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-12-22 12:08:19 +01:00
|
|
|
* @param bool $load_once Whether to require_once or require.
|
2022-09-21 03:09:10 +02:00
|
|
|
* @param array $args Additional arguments passed to the template.
|
|
|
|
*/
|
Code Modernization: Rename parameters that use reserved keywords in `wp-includes/template.php`.
While using reserved PHP keywords as parameter name labels is allowed, in the context of function calls using named parameters in PHP 8.0+, this will easily lead to confusion. To avoid that, it is recommended not to use reserved keywords as function parameter names.
This commit renames the `$require_once` parameter to `$load_once` in:
* `locate_template()`
* `load_template()`
Follow-up to [52946], [52996], [52997], [52998], [53003], [53014], [53029], [53039], [53116], [53117], [53137], [53174], [53184], [53185], [53192], [53193], [53198], [53203], [53207], [53215], [53216], [53220], [53230], [53232], [53236], [53239], [53240], [53242], [53243], [53245], [53246], [53257], [53269], [53270], [53271], [53272], [53273], [53274], [53275], [53276], [53277], [53281], [53283], [53284], [53285], [53287], [53364], [53365], [54927], [54929], [54930], [54931], [54932], [54933], [54938], [54943], [54944], [54945], [54946], [54947], [54948], [54950], [54951], [54952], [54956], [54959], [54960], [54961], [54962], [54964], [54965], [54969], [54970], [54971], [54972], [54996], [55000], [55011].
Props jrf, aristath, poena, justinahinon, SergeyBiryukov.
See #56788.
Built from https://develop.svn.wordpress.org/trunk@55013
git-svn-id: http://core.svn.wordpress.org/trunk@54546 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-12-22 12:08:19 +01:00
|
|
|
do_action( 'wp_after_load_template', $_template_file, $load_once, $args );
|
2012-02-28 02:49:49 +01:00
|
|
|
}
|