WP_Theme::get_post_templates(): array[]

Returns the theme’s post templates.

Return

array[] Array of page template arrays, keyed by post type and filename, with the value of the translated header name.

Source

public function get_post_templates() {	// If you screw up your active theme and we invalidate your parent, most things still work. Let it slide.	if ( $this->errors() && $this->errors()->get_error_codes() !== array( 'theme_parent_invalid' ) ) {	return array();	}	$post_templates = $this->cache_get( 'post_templates' );	if ( ! is_array( $post_templates ) ) {	$post_templates = array();	$files = (array) $this->get_files( 'php', 1, true );	foreach ( $files as $file => $full_path ) {	if ( ! preg_match( '|Template Name:(.*)$|mi', file_get_contents( $full_path ), $header ) ) {	continue;	}	$types = array( 'page' );	if ( preg_match( '|Template Post Type:(.*)$|mi', file_get_contents( $full_path ), $type ) ) {	$types = explode( ',', _cleanup_header_comment( $type[1] ) );	}	foreach ( $types as $type ) {	$type = sanitize_key( $type );	if ( ! isset( $post_templates[ $type ] ) ) {	$post_templates[ $type ] = array();	}	$post_templates[ $type ][ $file ] = _cleanup_header_comment( $header[1] );	}	}	$this->cache_add( 'post_templates', $post_templates );	}	if ( current_theme_supports( 'block-templates' ) ) {	$block_templates = get_block_templates( array(), 'wp_template' );	foreach ( get_post_types( array( 'public' => true ) ) as $type ) {	foreach ( $block_templates as $block_template ) {	if ( ! $block_template->is_custom ) {	continue;	}	if ( isset( $block_template->post_types ) && ! in_array( $type, $block_template->post_types, true ) ) {	continue;	}	$post_templates[ $type ][ $block_template->slug ] = $block_template->title;	}	}	}	if ( $this->load_textdomain() ) {	foreach ( $post_templates as &$post_type ) {	foreach ( $post_type as &$post_template ) {	$post_template = $this->translate_header( 'Template Name', $post_template );	}	}	}	return $post_templates; } 

Changelog

VersionDescription
5.8.0Include block templates.
4.7.0Introduced.

User Contributed Notes

  1. Skip to note 2 content

    As of 4.7 this method opens up a great world of the use template files for diffrent purposes. If you save a file within your Theme folder templates/example.php like this:

    <?php /** * Template Name: No sidebar and no images * Template Post Type: my_post_type *

    Then call:

    $templates = wp_get_theme()->get_post_templates();

    You got an array something like this:

    array(4) { ["my_post_type"]=> array(1) { ["templates/example.php"]=> string(18) "No sidebar and no images" } ["locations"]=> array(2) { ["templates/locations-max.php"]=> string(21) "Locations, no sidebar", ["templates/locations-no-maps.php"]=> string(21) "Locations, information only" } ["post"]=> array(1) { ["templates/full-width.php"]=> string(21) "Full page, no sidebar" } ["page"]=> array(1) { ["templates/full-width.php"]=> string(21) "Full page, no sidebar" } }

    If you only need an array of templates with specific post type, use get_page_templates() instead, as that function has a filter that many Themes and plugin gonna use with the 4.7 features.

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