render_block_core_query

The timeline below displays how wordpress function render_block_core_query has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.5

/**
 * Server-side rendering of the `core/query` block.
 *
 * @package WordPress
 */
/**
 * Modifies the static `core/query` block on the server.
 *
 * @since 6.4.0
 *
 * @param array    $attributes Block attributes.
 * @param string   $content    Block default content.
 * @param WP_Block $block      The block instance.
 *
 * @return string Returns the modified output of the query block.
 */
function render_block_core_query($attributes, $content, $block)
{
    $is_interactive = isset($attributes['enhancedPagination']) && true === $attributes['enhancedPagination'] && isset($attributes['queryId']);
    // Enqueue the script module and add the necessary directives if the block is
    // interactive.
    if ($is_interactive) {
        $suffix = wp_scripts_get_suffix();
        if (defined('IS_GUTENBERG_PLUGIN') && IS_GUTENBERG_PLUGIN) {
            $module_url = gutenberg_url('/build/interactivity/query.min.js');
        }
        wp_register_script_module('@wordpress/block-library/query', isset($module_url) ? $module_url : includes_url("blocks/query/view{$suffix}.js"), array(array('id' => '@wordpress/interactivity', 'import' => 'static'), array('id' => '@wordpress/interactivity-router', 'import' => 'dynamic')), defined('GUTENBERG_VERSION') ? GUTENBERG_VERSION : get_bloginfo('version'));
        wp_enqueue_script_module('@wordpress/block-library/query');
        $p = new WP_HTML_Tag_Processor($content);
        if ($p->next_tag()) {
            // Add the necessary directives.
            $p->set_attribute('data-wp-interactive', 'core/query');
            $p->set_attribute('data-wp-router-region', 'query-' . $attributes['queryId']);
            $p->set_attribute('data-wp-init', 'callbacks.setQueryRef');
            $p->set_attribute('data-wp-context', '{}');
            $content = $p->get_updated_html();
        }
    }
    // Add the styles to the block type if the block is interactive and remove
    // them if it's not.
    $style_asset = 'wp-block-query';
    if (!wp_style_is($style_asset)) {
        $style_handles = $block->block_type->style_handles;
        // If the styles are not needed, and they are still in the `style_handles`, remove them.
        if (!$is_interactive && in_array($style_asset, $style_handles, true)) {
            $block->block_type->style_handles = array_diff($style_handles, array($style_asset));
        }
        // If the styles are needed, but they were previously removed, add them again.
        if ($is_interactive && !in_array($style_asset, $style_handles, true)) {
            $block->block_type->style_handles = array_merge($style_handles, array($style_asset));
        }
    }
    return $content;
}

WordPress Version: 4.3

/**
 * Server-side rendering of the `core/query` block.
 *
 * @package WordPress
 */
/**
 * Modifies the static `core/query` block on the server.
 *
 * @since 6.4.0
 *
 * @param array    $attributes Block attributes.
 * @param string   $content    Block default content.
 * @param WP_Block $block      The block instance.
 *
 * @return string Returns the modified output of the query block.
 */
function render_block_core_query($attributes, $content, $block)
{
    if ($attributes['enhancedPagination'] && isset($attributes['queryId'])) {
        $p = new WP_HTML_Tag_Processor($content);
        if ($p->next_tag()) {
            // Add the necessary directives.
            $p->set_attribute('data-wp-interactive', true);
            $p->set_attribute('data-wp-navigation-id', 'query-' . $attributes['queryId']);
            // Use context to send translated strings.
            $p->set_attribute('data-wp-context', wp_json_encode(array('core' => array('query' => array('loadingText' => __('Loading page, please wait.'), 'loadedText' => __('Page Loaded.')))), JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP));
            $content = $p->get_updated_html();
            // Mark the block as interactive.
            $block->block_type->supports['interactivity'] = true;
            // Add a div to announce messages using `aria-live`.
            $html_tag = 'div';
            if (!empty($attributes['tagName'])) {
                $html_tag = esc_attr($attributes['tagName']);
            }
            $last_tag_position = strripos($content, '</' . $html_tag . '>');
            $content = substr_replace($content, '<div
					class="screen-reader-text"
					aria-live="polite"
					data-wp-text="context.core.query.message"
				></div>
				<div
					class="wp-block-query__enhanced-pagination-animation"
					data-wp-class--start-animation="selectors.core.query.startAnimation"
					data-wp-class--finish-animation="selectors.core.query.finishAnimation"
				></div>', $last_tag_position, 0);
        }
    }
    $view_asset = 'wp-block-query-view';
    if (!wp_script_is($view_asset)) {
        $script_handles = $block->block_type->view_script_handles;
        // If the script is not needed, and it is still in the `view_script_handles`, remove it.
        if ((!$attributes['enhancedPagination'] || !isset($attributes['queryId'])) && in_array($view_asset, $script_handles, true)) {
            $block->block_type->view_script_handles = array_diff($script_handles, array($view_asset));
        }
        // If the script is needed, but it was previously removed, add it again.
        if ($attributes['enhancedPagination'] && isset($attributes['queryId']) && !in_array($view_asset, $script_handles, true)) {
            $block->block_type->view_script_handles = array_merge($script_handles, array($view_asset));
        }
    }
    $style_asset = 'wp-block-query';
    if (!wp_style_is($style_asset)) {
        $style_handles = $block->block_type->style_handles;
        // If the styles are not needed, and they are still in the `style_handles`, remove them.
        if ((!$attributes['enhancedPagination'] || !isset($attributes['queryId'])) && in_array($style_asset, $style_handles, true)) {
            $block->block_type->style_handles = array_diff($style_handles, array($style_asset));
        }
        // If the styles are needed, but they were previously removed, add them again.
        if ($attributes['enhancedPagination'] && isset($attributes['queryId']) && !in_array($style_asset, $style_handles, true)) {
            $block->block_type->style_handles = array_merge($style_handles, array($style_asset));
        }
    }
    return $content;
}

WordPress Version: 6.4

/**
 * Server-side rendering of the `core/query` block.
 *
 * @package WordPress
 */
/**
 * Modifies the static `core/query` block on the server.
 *
 * @since 6.4.0
 *
 * @param array    $attributes Block attributes.
 * @param string   $content    Block default content.
 * @param WP_Block $block      The block instance.
 *
 * @return string Returns the modified output of the query block.
 */
function render_block_core_query($attributes, $content, $block)
{
    if ($attributes['enhancedPagination'] && isset($attributes['queryId'])) {
        $p = new WP_HTML_Tag_Processor($content);
        if ($p->next_tag()) {
            // Add the necessary directives.
            $p->set_attribute('data-wp-interactive', true);
            $p->set_attribute('data-wp-navigation-id', 'query-' . $attributes['queryId']);
            // Use context to send translated strings.
            $p->set_attribute('data-wp-context', wp_json_encode(array('core' => array('query' => array('loadingText' => __('Loading page, please wait.'), 'loadedText' => __('Page Loaded.')))), JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP));
            $content = $p->get_updated_html();
            // Mark the block as interactive.
            $block->block_type->supports['interactivity'] = true;
            // Add a div to announce messages using `aria-live`.
            $last_div_position = strripos($content, '</div>');
            $content = substr_replace($content, '<div
					class="wp-block-query__enhanced-pagination-navigation-announce screen-reader-text"
					aria-live="polite"
					data-wp-text="context.core.query.message"
				></div>
				<div
					class="wp-block-query__enhanced-pagination-animation"
					data-wp-class--start-animation="selectors.core.query.startAnimation"
					data-wp-class--finish-animation="selectors.core.query.finishAnimation"
				></div>', $last_div_position, 0);
        }
    }
    $view_asset = 'wp-block-query-view';
    if (!wp_script_is($view_asset)) {
        $script_handles = $block->block_type->view_script_handles;
        // If the script is not needed, and it is still in the `view_script_handles`, remove it.
        if ((!$attributes['enhancedPagination'] || !isset($attributes['queryId'])) && in_array($view_asset, $script_handles, true)) {
            $block->block_type->view_script_handles = array_diff($script_handles, array($view_asset));
        }
        // If the script is needed, but it was previously removed, add it again.
        if ($attributes['enhancedPagination'] && isset($attributes['queryId']) && !in_array($view_asset, $script_handles, true)) {
            $block->block_type->view_script_handles = array_merge($script_handles, array($view_asset));
        }
    }
    $style_asset = 'wp-block-query';
    if (!wp_style_is($style_asset)) {
        $style_handles = $block->block_type->style_handles;
        // If the styles are not needed, and they are still in the `style_handles`, remove them.
        if ((!$attributes['enhancedPagination'] || !isset($attributes['queryId'])) && in_array($style_asset, $style_handles, true)) {
            $block->block_type->style_handles = array_diff($style_handles, array($style_asset));
        }
        // If the styles are needed, but they were previously removed, add them again.
        if ($attributes['enhancedPagination'] && isset($attributes['queryId']) && !in_array($style_asset, $style_handles, true)) {
            $block->block_type->style_handles = array_merge($style_handles, array($style_asset));
        }
    }
    return $content;
}