Alert: This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only in other core functions. It is listed here for completeness.

resolve_block_template() WordPress Function

The resolve_block_template() function is used to resolve a template for a given block. This function will first look for a template in the theme's directory. If a template is not found, it will look for a template in the plugin's directory.

resolve_block_template( string $template_type, string[] $template_hierarchy, string $fallback_template ) #

Return the correct ‘wp_template’ to render for the request template type.


Parameters

$template_type

(string)(Required)The current template type.

$template_hierarchy

(string[])(Required)The current template hierarchy, ordered by priority.

$fallback_template

(string)(Required)A PHP fallback template to use if no matching block template is found.


Top ↑

Return

(WP_Block_Template|null) template A template object, or null if none could be found.


Top ↑

Source

File: wp-includes/block-template.php

132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
function resolve_block_template( $template_type, $template_hierarchy, $fallback_template ) {
    if ( ! $template_type ) {
        return null;
    }
 
    if ( empty( $template_hierarchy ) ) {
        $template_hierarchy = array( $template_type );
    }
 
    $slugs = array_map(
        '_strip_template_file_suffix',
        $template_hierarchy
    );
 
    // Find all potential templates 'wp_template' post matching the hierarchy.
    $query     = array(
        'theme'    => wp_get_theme()->get_stylesheet(),
        'slug__in' => $slugs,
    );
    $templates = get_block_templates( $query );
 
    // Order these templates per slug priority.
    // Build map of template slugs to their priority in the current hierarchy.
    $slug_priorities = array_flip( $slugs );
 
    usort(
        $templates,
        static function ( $template_a, $template_b ) use ( $slug_priorities ) {
            return $slug_priorities[ $template_a->slug ] - $slug_priorities[ $template_b->slug ];
        }
    );
 
    $theme_base_path        = get_stylesheet_directory() . DIRECTORY_SEPARATOR;
    $parent_theme_base_path = get_template_directory() . DIRECTORY_SEPARATOR;
 
    // Is the active theme a child theme, and is the PHP fallback template part of it?
    if (
        strpos( $fallback_template, $theme_base_path ) === 0 &&
        strpos( $fallback_template, $parent_theme_base_path ) === false
    ) {
        $fallback_template_slug = substr(
            $fallback_template,
            // Starting position of slug.
            strpos( $fallback_template, $theme_base_path ) + strlen( $theme_base_path ),
            // Remove '.php' suffix.
            -4
        );
 
        // Is our candidate block template's slug identical to our PHP fallback template's?
        if (
            count( $templates ) &&
            $fallback_template_slug === $templates[0]->slug &&
            'theme' === $templates[0]->source
        ) {
            // Unfortunately, we cannot trust $templates[0]->theme, since it will always
            // be set to the active theme's slug by _build_block_template_result_from_file(),
            // even if the block template is really coming from the active theme's parent.
            // (The reason for this is that we want it to be associated with the active theme
            // -- not its parent -- once we edit it and store it to the DB as a wp_template CPT.)
            // Instead, we use _get_block_template_file() to locate the block template file.
            $template_file = _get_block_template_file( 'wp_template', $fallback_template_slug );
            if ( $template_file && get_template() === $template_file['theme'] ) {
                // The block template is part of the parent theme, so we
                // have to give precedence to the child theme's PHP template.
                array_shift( $templates );
            }
        }
    }
 
    return count( $templates ) ? $templates[0] : null;
}


Top ↑

Changelog

Changelog
VersionDescription
5.9.0Added the $fallback_template parameter.
5.8.0Introduced.

The content displayed on this page has been created in part by processing WordPress source code files which are made available under the GPLv2 (or a later version) license by the Free Software Foundation. In addition to this, the content includes user-written examples and information. All material is subject to review and curation by the WPPaste.com community.