Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions src/wp-includes/block-template.php
Original file line number Diff line number Diff line change
Expand Up @@ -208,14 +208,15 @@ function _block_template_render_title_tag() {
* @access private
* @since 5.8.0
*
* @global string $_wp_current_template_id
* @global string $_wp_current_template_content
* @global WP_Embed $wp_embed
* @global WP_Query $wp_query
*
* @return string Block template markup.
*/
function get_the_block_template_html() {
global $_wp_current_template_content, $wp_embed, $wp_query;
global $_wp_current_template_id, $_wp_current_template_content, $wp_embed, $wp_query;

if ( ! $_wp_current_template_content ) {
if ( is_user_logged_in() ) {
Expand All @@ -242,8 +243,18 @@ function get_the_block_template_html() {
* Even if the block template contained a `core/query` and `core/post-template` block referencing the main query
* loop, it would not cause errors since it would use a cloned instance and go through the same loop of a single
* post, within the actual main query loop.
*
* This special logic should be skipped if the current template does not come from the current theme, in which case
* it has been injected by a plugin by hijacking the block template loader mechanism. In that case, entirely custom
* logic may be applied which is unpredictable and therefore safer to omit this special handling on.
*/
if ( is_singular() && 1 === $wp_query->post_count && have_posts() ) {
if (
$_wp_current_template_id
&& str_starts_with( $_wp_current_template_id, get_stylesheet() . '//' )
&& is_singular()
&& 1 === $wp_query->post_count
&& have_posts()
) {
while ( have_posts() ) {
the_post();
$content = do_blocks( $content );
Expand Down