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;
}