Merged in feature/81-dev-dev01 (pull request #5)
auto-patch 81-dev-dev01-2023-12-05T22_45_26 * auto-patch 81-dev-dev01-2023-12-05T22_45_26
This commit is contained in:
@@ -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;
|
||||
global $wp_embed;
|
||||
global $_wp_current_template_id, $_wp_current_template_content, $wp_embed, $wp_query;
|
||||
|
||||
if ( ! $_wp_current_template_content ) {
|
||||
if ( is_user_logged_in() ) {
|
||||
@@ -228,7 +229,40 @@ function get_the_block_template_html() {
|
||||
$content = $wp_embed->autoembed( $content );
|
||||
$content = shortcode_unautop( $content );
|
||||
$content = do_shortcode( $content );
|
||||
$content = do_blocks( $content );
|
||||
|
||||
/*
|
||||
* Most block themes omit the `core/query` and `core/post-template` blocks in their singular content templates.
|
||||
* While this technically still works since singular content templates are always for only one post, it results in
|
||||
* the main query loop never being entered which causes bugs in core and the plugin ecosystem.
|
||||
*
|
||||
* The workaround below ensures that the loop is started even for those singular templates. The while loop will by
|
||||
* definition only go through a single iteration, i.e. `do_blocks()` is only called once. Additional safeguard
|
||||
* checks are included to ensure the main query loop has not been tampered with and really only encompasses a
|
||||
* single post.
|
||||
*
|
||||
* 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 (
|
||||
$_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 );
|
||||
}
|
||||
} else {
|
||||
$content = do_blocks( $content );
|
||||
}
|
||||
|
||||
$content = wptexturize( $content );
|
||||
$content = convert_smilies( $content );
|
||||
$content = wp_filter_content_tags( $content, 'template' );
|
||||
|
||||
Reference in New Issue
Block a user