get_page_template_slug( int|WP_Post $post = null ): string|false

Gets the specific template filename for a given post.

Parameters

$postint|WP_Postoptional
Post ID or WP_Post object. Default is global $post.

Default:null

Return

string|false Page template filename. Returns an empty string when the default page template is in use. Returns false if the post does not exist.

More Information

The filename of a Page’s assigned custom template is stored as the value of a Custom Field with a key named '_wp_page_template' (in the wp_postmeta database table). If the template is stored in a Theme’s subdirectory (or a Parent Theme’s subdirectory of a Child Theme), the value of the wp_postmeta is both the folder and file names, e.g.

my-templates/my-custom-template.php

The function get_page_template_slug() returns an empty string when the value of '_wp_page_template' is either empty or 'default'.

Custom fields starting with an underscore do not display in the Edit screen’s Custom Fields module. To retrieve a Page’s custom template metadata, you can also use:

get_post_meta( $post->ID, '_wp_page_template', true )

Source

function get_page_template_slug( $post = null ) {
	$post = get_post( $post );

	if ( ! $post ) {
		return false;
	}

	$template = get_post_meta( $post->ID, '_wp_page_template', true );

	if ( ! $template || 'default' === $template ) {
		return '';
	}

	return $template;
}

Changelog

VersionDescription
4.7.0Now works with any post type, not just pages.
3.4.0Introduced.

User Contributed Notes

  1. Skip to note 4 content

    If you need reverse engineering to find all the pages that are working under a particular page template filename, this is one solution that may work for you.

    function wpdocs_get_pages_by_template_filename( $page_template_filename ) {
    	return get_pages( array(
    		'meta_key' => '_wp_page_template',
    		'meta_value' => $page_template_filename
    	) );
    }

    You can use this function for example:

    $pages = wpdocs_get_pages_by_template_filename( 'templates/offers.php' );

    And it will return (array|false) list of pages matching by that page template filename.

    Generally, it happens that inside a theme you build, you need to find a certain page that works under a special custom template and that you need to dynamically access its ID, content, title, etc, and this function will help for that.

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