The locate_template() WordPress PHP function retrieves the name of the highest priority template file that exists.
Usage
locate_template($template_names, $load = false, $load_once = true, $args = array())
Input:
$template = locate_template('single-post.php');
Output:
/path/to/your/theme/single-post.php
Parameters
- $template_names (string|array) – Required. Template file(s) to search for, in order.
- $load (bool) – Optional. If true, the template file will be loaded if it is found. Default: false.
- $load_once (bool) – Optional. Whether to require_once or require. Has no effect if $load is false. Default: true.
- $args (array) – Optional. Additional arguments passed to the template. Default: array().
More information
See WordPress Developer Resources: locate_template()
Examples
Load a specific template part based on the current page name
Explanation:
This example checks if a template part named ‘content-page_name.php’ exists, and if so, it loads that specific template part. Otherwise, it loads the regular content.
Code:
if (locate_template('content-' . $pageName . '.php') != '') { // Load the page-specific template get_template_part('content', $pageName); } else { // Load the regular content the_content(); }
Locate and load a custom header
Explanation:
This example locates and loads a custom header file named ‘header-custom.php’ if it exists. If not, it loads the default ‘header.php’.
Code:
$custom_header = locate_template('header-custom.php', true); if ($custom_header) { get_header('custom'); } else { get_header(); }
Load a template file from a plugin
Explanation:
This example locates and loads a template file named ‘custom-template.php’ from a plugin’s directory.
Code:
$plugin_path = plugin_dir_path(__FILE__); $template = locate_template('custom-template.php', false, false, array('path' => $plugin_path)); if ($template) { load_template($template); }
Load a specific sidebar based on post type
Explanation:
This example loads a specific sidebar file named ‘sidebar-post_type.php’ based on the current post type. If the specific sidebar file does not exist, it loads the default ‘sidebar.php’.
Code:
$post_type = get_post_type(); if (locate_template('sidebar-' . $post_type . '.php') != '') { get_sidebar($post_type); } else { get_sidebar(); }
Load a fallback template if a specific template does not exist
Explanation:
This example tries to locate and load a specific template named ‘archive-special.php’. If it does not exist, it loads the default ‘archive.php’ file.
Code:
$special_archive = locate_template('archive-special.php', true); if ($special_archive) { get_template_part('archive', 'special'); } else { get_template_part('archive'); }