is_page_template( string|array $template = '' )

Determines whether currently in a page template.


Description Description

This template tag allows you to determine if you are in a page template. You can optionally provide a template name or array of template names and then the check will be specific to that template.

For more information on this and similar theme functions, check out the Conditional Tags article in the Theme Developer Handbook.


Parameters Parameters

$template

(string|array) (Optional) The specific template name or array of templates to match.

Default value: ''


Top ↑

Return Return

(bool) True on success, false on failure.


Top ↑

Source Source

File: wp-includes/post-template.php

function is_page_template( $template = '' ) {
	if ( ! is_singular() ) {
		return false;
	}

	$page_template = get_page_template_slug( get_queried_object_id() );

	if ( empty( $template ) ) {
		return (bool) $page_template;
	}

	if ( $template == $page_template ) {
		return true;
	}

	if ( is_array( $template ) ) {
		if ( ( in_array( 'default', $template, true ) && ! $page_template )
			|| in_array( $page_template, $template, true )
		) {
			return true;
		}
	}

	return ( 'default' === $template && ! $page_template );
}

Top ↑

Changelog Changelog

Changelog
Version Description
4.7.0 Now works with any post type, not just pages.
4.2.0 The $template parameter was changed to also accept an array of page templates.
2.5.0 Introduced.

Top ↑

More Information More Information

Top ↑

Page template in subdirectory Page template in subdirectory

If the page template is located in a subdirectory of the theme (since WP 3.4), prepend the folder name and a slash to the template filename, e.g.:

is_page_template( 'templates/about.php' );

Top ↑

Cannot Be Used Inside The Loop Cannot Be Used Inside The Loop

Due to certain global variables being overwritten during The Loop is_page_template() will not work. In order to use it after The Loop you must call wp_reset_query() after The Loop.

Alternative Alternative

Since the page template slug is stored inside the post_meta for any post that has been assigned to a page template, it is possible to directly query the post_meta to see whether any given page has been assigned a page template. This is the method that is_page_template() uses internally.

The function get_page_template_slug( $post_id ) will return the slug of the currently assigned page template (or an empty string if no template has been assigned – or false if the $post_id does not correspond to an actual page). You can easily use this anywhere (in The Loop, or outside) to determine whether any page has been assigned a page template.

  // in the loop:
  if ( get_page_template_slug( get_the_ID() ) ){
     // Yep, this page has a page template
  }

  // anywhere:
  if ( get_page_template_slug( $some_post_ID ) ){
     // Uh-huh.
  }


Top ↑

User Contributed Notes User Contributed Notes

  1. Skip to note 1 content
    Contributed by Codex

    Is Page Template ‘about’ being used? Note that unlike with other conditionals, if you want to specify a particular Page Template, you need to use the filename, such as about.php or my_page_template.php.

    if ( is_page_template( 'about.php' ) ) {
    	// about.php is used
    } else {
    	// about.php is not used
    }
    
    
  2. Skip to note 2 content
    Contributed by Sam

    If your page template resides within a directory, you can use something like this:

    if ( is_page_template( 'directory-name/page-about.php' ) ) {
        // about.php is used
    } else {
        // about.php is not used
    }

    This can be useful if you’re using multiple page templates and want to keep your files organised.

  3. Skip to note 3 content
    Contributed by Anthony Hortin

    You can also specify multiple templates by passing an array of template names.

    if ( is_page_template( array( 'template-full-width.php', 'template-product-offers.php' ) ) ) {
       // Do Something here if either of the above templates are being used
    }
    else {
       // Else do this
    }
    

You must log in before being able to contribute a note or feedback.