2021-05-19 11:09:27 -04:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Server-side rendering of the `core/query` block.
|
|
|
|
*
|
|
|
|
* @package WordPress
|
|
|
|
*/
|
|
|
|
|
2023-09-26 10:23:26 -04:00
|
|
|
/**
|
|
|
|
* Modifies the static `core/query` block on the server.
|
|
|
|
*
|
|
|
|
* @since 6.4.0
|
|
|
|
*
|
Editor: 2nd update of npm packages for 6.4 RC3.
This second update for RC3 includes the following fixes:
* [https://github.com/WordPress/gutenberg/pull/55724 Update label for lightbox editor UI] - string change.
* [https://github.com/WordPress/gutenberg/pull/55720 Query: Require queryId for enhanced pagination to prevent PHP notices] and warnings.
* [https://github.com/WordPress/gutenberg/pull/55714 Query block enhanced pagination: Detect inner plugin blocks during render] - which avoids turning off enhanced pagination in TT4, includes string changes.
* [https://github.com/WordPress/gutenberg/pull/55309 Query Loop block: Reuse existing screen-reader-text CSS class for the enhanced pagination aria-live region].
Follow up to [57034], [56987], [56961], [56849], [56818], [56816].
Props afercia, aristath, artemiosans, czapla, darerodz, glendaviesnz, hellofromTonya, jameskoster, joen, luisherranz, mikachan, ocean90, peterwilsoncc, ramonopoly, rajinsharwar, swissspidy.
Fixes #59411.
Built from https://develop.svn.wordpress.org/trunk@57048
git-svn-id: http://core.svn.wordpress.org/trunk@56559 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-11-01 13:49:17 -04:00
|
|
|
* @param array $attributes Block attributes.
|
|
|
|
* @param string $content Block default content.
|
|
|
|
* @param WP_Block $block The block instance.
|
2023-09-26 10:23:26 -04:00
|
|
|
*
|
|
|
|
* @return string Returns the modified output of the query block.
|
|
|
|
*/
|
|
|
|
function render_block_core_query( $attributes, $content, $block ) {
|
Editor: 2nd update of npm packages for 6.4 RC3.
This second update for RC3 includes the following fixes:
* [https://github.com/WordPress/gutenberg/pull/55724 Update label for lightbox editor UI] - string change.
* [https://github.com/WordPress/gutenberg/pull/55720 Query: Require queryId for enhanced pagination to prevent PHP notices] and warnings.
* [https://github.com/WordPress/gutenberg/pull/55714 Query block enhanced pagination: Detect inner plugin blocks during render] - which avoids turning off enhanced pagination in TT4, includes string changes.
* [https://github.com/WordPress/gutenberg/pull/55309 Query Loop block: Reuse existing screen-reader-text CSS class for the enhanced pagination aria-live region].
Follow up to [57034], [56987], [56961], [56849], [56818], [56816].
Props afercia, aristath, artemiosans, czapla, darerodz, glendaviesnz, hellofromTonya, jameskoster, joen, luisherranz, mikachan, ocean90, peterwilsoncc, ramonopoly, rajinsharwar, swissspidy.
Fixes #59411.
Built from https://develop.svn.wordpress.org/trunk@57048
git-svn-id: http://core.svn.wordpress.org/trunk@56559 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-11-01 13:49:17 -04:00
|
|
|
if ( $attributes['enhancedPagination'] && isset( $attributes['queryId'] ) ) {
|
2023-09-26 10:23:26 -04:00
|
|
|
$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.' ),
|
|
|
|
),
|
|
|
|
),
|
2023-10-10 07:30:19 -04:00
|
|
|
),
|
|
|
|
JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP
|
2023-09-26 10:23:26 -04:00
|
|
|
)
|
|
|
|
);
|
|
|
|
$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`.
|
Editor: update npm packages for 6.4.2.
Package updates with bug fixes related to patterns, Query look interactivity, design tools UI and accessibility.
Props mikachan, jorbin, kebbet, artemiosans, talldanwp, ramonopoly, alexstine, andrewserong, mamaduka, cbravobernal, ajlende, luisherranz.
See #59828.
Built from https://develop.svn.wordpress.org/trunk@57109
git-svn-id: http://core.svn.wordpress.org/trunk@56620 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-11-13 19:12:23 -05:00
|
|
|
$html_tag = 'div';
|
|
|
|
if ( ! empty( $attributes['tagName'] ) ) {
|
|
|
|
$html_tag = esc_attr( $attributes['tagName'] );
|
|
|
|
}
|
|
|
|
$last_tag_position = strripos( $content, '</' . $html_tag . '>' );
|
2023-09-26 10:23:26 -04:00
|
|
|
$content = substr_replace(
|
|
|
|
$content,
|
|
|
|
'<div
|
Editor: update npm packages for 6.4.2.
Package updates with bug fixes related to patterns, Query look interactivity, design tools UI and accessibility.
Props mikachan, jorbin, kebbet, artemiosans, talldanwp, ramonopoly, alexstine, andrewserong, mamaduka, cbravobernal, ajlende, luisherranz.
See #59828.
Built from https://develop.svn.wordpress.org/trunk@57109
git-svn-id: http://core.svn.wordpress.org/trunk@56620 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-11-13 19:12:23 -05:00
|
|
|
class="screen-reader-text"
|
2023-09-26 10:23:26 -04:00
|
|
|
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>',
|
Editor: update npm packages for 6.4.2.
Package updates with bug fixes related to patterns, Query look interactivity, design tools UI and accessibility.
Props mikachan, jorbin, kebbet, artemiosans, talldanwp, ramonopoly, alexstine, andrewserong, mamaduka, cbravobernal, ajlende, luisherranz.
See #59828.
Built from https://develop.svn.wordpress.org/trunk@57109
git-svn-id: http://core.svn.wordpress.org/trunk@56620 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-11-13 19:12:23 -05:00
|
|
|
$last_tag_position,
|
2023-09-26 10:23:26 -04:00
|
|
|
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.
|
Editor: 2nd update of npm packages for 6.4 RC3.
This second update for RC3 includes the following fixes:
* [https://github.com/WordPress/gutenberg/pull/55724 Update label for lightbox editor UI] - string change.
* [https://github.com/WordPress/gutenberg/pull/55720 Query: Require queryId for enhanced pagination to prevent PHP notices] and warnings.
* [https://github.com/WordPress/gutenberg/pull/55714 Query block enhanced pagination: Detect inner plugin blocks during render] - which avoids turning off enhanced pagination in TT4, includes string changes.
* [https://github.com/WordPress/gutenberg/pull/55309 Query Loop block: Reuse existing screen-reader-text CSS class for the enhanced pagination aria-live region].
Follow up to [57034], [56987], [56961], [56849], [56818], [56816].
Props afercia, aristath, artemiosans, czapla, darerodz, glendaviesnz, hellofromTonya, jameskoster, joen, luisherranz, mikachan, ocean90, peterwilsoncc, ramonopoly, rajinsharwar, swissspidy.
Fixes #59411.
Built from https://develop.svn.wordpress.org/trunk@57048
git-svn-id: http://core.svn.wordpress.org/trunk@56559 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-11-01 13:49:17 -04:00
|
|
|
if (
|
|
|
|
( ! $attributes['enhancedPagination'] || ! isset( $attributes['queryId'] ) )
|
|
|
|
&& in_array( $view_asset, $script_handles, true )
|
|
|
|
) {
|
2023-09-26 10:23:26 -04:00
|
|
|
$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.
|
Editor: 2nd update of npm packages for 6.4 RC3.
This second update for RC3 includes the following fixes:
* [https://github.com/WordPress/gutenberg/pull/55724 Update label for lightbox editor UI] - string change.
* [https://github.com/WordPress/gutenberg/pull/55720 Query: Require queryId for enhanced pagination to prevent PHP notices] and warnings.
* [https://github.com/WordPress/gutenberg/pull/55714 Query block enhanced pagination: Detect inner plugin blocks during render] - which avoids turning off enhanced pagination in TT4, includes string changes.
* [https://github.com/WordPress/gutenberg/pull/55309 Query Loop block: Reuse existing screen-reader-text CSS class for the enhanced pagination aria-live region].
Follow up to [57034], [56987], [56961], [56849], [56818], [56816].
Props afercia, aristath, artemiosans, czapla, darerodz, glendaviesnz, hellofromTonya, jameskoster, joen, luisherranz, mikachan, ocean90, peterwilsoncc, ramonopoly, rajinsharwar, swissspidy.
Fixes #59411.
Built from https://develop.svn.wordpress.org/trunk@57048
git-svn-id: http://core.svn.wordpress.org/trunk@56559 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-11-01 13:49:17 -04:00
|
|
|
if ( $attributes['enhancedPagination'] && isset( $attributes['queryId'] ) && ! in_array( $view_asset, $script_handles, true ) ) {
|
2023-09-26 10:23:26 -04:00
|
|
|
$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.
|
Editor: 2nd update of npm packages for 6.4 RC3.
This second update for RC3 includes the following fixes:
* [https://github.com/WordPress/gutenberg/pull/55724 Update label for lightbox editor UI] - string change.
* [https://github.com/WordPress/gutenberg/pull/55720 Query: Require queryId for enhanced pagination to prevent PHP notices] and warnings.
* [https://github.com/WordPress/gutenberg/pull/55714 Query block enhanced pagination: Detect inner plugin blocks during render] - which avoids turning off enhanced pagination in TT4, includes string changes.
* [https://github.com/WordPress/gutenberg/pull/55309 Query Loop block: Reuse existing screen-reader-text CSS class for the enhanced pagination aria-live region].
Follow up to [57034], [56987], [56961], [56849], [56818], [56816].
Props afercia, aristath, artemiosans, czapla, darerodz, glendaviesnz, hellofromTonya, jameskoster, joen, luisherranz, mikachan, ocean90, peterwilsoncc, ramonopoly, rajinsharwar, swissspidy.
Fixes #59411.
Built from https://develop.svn.wordpress.org/trunk@57048
git-svn-id: http://core.svn.wordpress.org/trunk@56559 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-11-01 13:49:17 -04:00
|
|
|
if (
|
|
|
|
( ! $attributes['enhancedPagination'] || ! isset( $attributes['queryId'] ) )
|
|
|
|
&& in_array( $style_asset, $style_handles, true )
|
|
|
|
) {
|
2023-09-26 10:23:26 -04:00
|
|
|
$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.
|
Editor: 2nd update of npm packages for 6.4 RC3.
This second update for RC3 includes the following fixes:
* [https://github.com/WordPress/gutenberg/pull/55724 Update label for lightbox editor UI] - string change.
* [https://github.com/WordPress/gutenberg/pull/55720 Query: Require queryId for enhanced pagination to prevent PHP notices] and warnings.
* [https://github.com/WordPress/gutenberg/pull/55714 Query block enhanced pagination: Detect inner plugin blocks during render] - which avoids turning off enhanced pagination in TT4, includes string changes.
* [https://github.com/WordPress/gutenberg/pull/55309 Query Loop block: Reuse existing screen-reader-text CSS class for the enhanced pagination aria-live region].
Follow up to [57034], [56987], [56961], [56849], [56818], [56816].
Props afercia, aristath, artemiosans, czapla, darerodz, glendaviesnz, hellofromTonya, jameskoster, joen, luisherranz, mikachan, ocean90, peterwilsoncc, ramonopoly, rajinsharwar, swissspidy.
Fixes #59411.
Built from https://develop.svn.wordpress.org/trunk@57048
git-svn-id: http://core.svn.wordpress.org/trunk@56559 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-11-01 13:49:17 -04:00
|
|
|
if ( $attributes['enhancedPagination'] && isset( $attributes['queryId'] ) && ! in_array( $style_asset, $style_handles, true ) ) {
|
2023-09-26 10:23:26 -04:00
|
|
|
$block->block_type->style_handles = array_merge( $style_handles, array( $style_asset ) );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $content;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Ensure that the view script has the `wp-interactivity` dependency.
|
|
|
|
*
|
|
|
|
* @since 6.4.0
|
|
|
|
*
|
|
|
|
* @global WP_Scripts $wp_scripts
|
|
|
|
*/
|
|
|
|
function block_core_query_ensure_interactivity_dependency() {
|
|
|
|
global $wp_scripts;
|
|
|
|
if (
|
|
|
|
isset( $wp_scripts->registered['wp-block-query-view'] ) &&
|
|
|
|
! in_array( 'wp-interactivity', $wp_scripts->registered['wp-block-query-view']->deps, true )
|
|
|
|
) {
|
|
|
|
$wp_scripts->registered['wp-block-query-view']->deps[] = 'wp-interactivity';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
add_action( 'wp_print_scripts', 'block_core_query_ensure_interactivity_dependency' );
|
|
|
|
|
2021-05-19 11:09:27 -04:00
|
|
|
/**
|
|
|
|
* Registers the `core/query` block on the server.
|
|
|
|
*/
|
|
|
|
function register_block_core_query() {
|
|
|
|
register_block_type_from_metadata(
|
2023-09-26 10:23:26 -04:00
|
|
|
__DIR__ . '/query',
|
|
|
|
array(
|
|
|
|
'render_callback' => 'render_block_core_query',
|
|
|
|
)
|
2021-05-19 11:09:27 -04:00
|
|
|
);
|
|
|
|
}
|
|
|
|
add_action( 'init', 'register_block_core_query' );
|
Editor: 2nd update of npm packages for 6.4 RC3.
This second update for RC3 includes the following fixes:
* [https://github.com/WordPress/gutenberg/pull/55724 Update label for lightbox editor UI] - string change.
* [https://github.com/WordPress/gutenberg/pull/55720 Query: Require queryId for enhanced pagination to prevent PHP notices] and warnings.
* [https://github.com/WordPress/gutenberg/pull/55714 Query block enhanced pagination: Detect inner plugin blocks during render] - which avoids turning off enhanced pagination in TT4, includes string changes.
* [https://github.com/WordPress/gutenberg/pull/55309 Query Loop block: Reuse existing screen-reader-text CSS class for the enhanced pagination aria-live region].
Follow up to [57034], [56987], [56961], [56849], [56818], [56816].
Props afercia, aristath, artemiosans, czapla, darerodz, glendaviesnz, hellofromTonya, jameskoster, joen, luisherranz, mikachan, ocean90, peterwilsoncc, ramonopoly, rajinsharwar, swissspidy.
Fixes #59411.
Built from https://develop.svn.wordpress.org/trunk@57048
git-svn-id: http://core.svn.wordpress.org/trunk@56559 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-11-01 13:49:17 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Traverse the tree of blocks looking for any plugin block (i.e., a block from
|
|
|
|
* an installed plugin) inside a Query block with the enhanced pagination
|
|
|
|
* enabled. If at least one is found, the enhanced pagination is effectively
|
|
|
|
* disabled to prevent any potential incompatibilities.
|
|
|
|
*
|
|
|
|
* @since 6.4.0
|
|
|
|
*
|
|
|
|
* @param array $parsed_block The block being rendered.
|
|
|
|
* @return string Returns the parsed block, unmodified.
|
|
|
|
*/
|
|
|
|
function block_core_query_disable_enhanced_pagination( $parsed_block ) {
|
|
|
|
static $enhanced_query_stack = array();
|
|
|
|
static $dirty_enhanced_queries = array();
|
|
|
|
static $render_query_callback = null;
|
|
|
|
|
|
|
|
$block_name = $parsed_block['blockName'];
|
|
|
|
|
|
|
|
if (
|
|
|
|
'core/query' === $block_name &&
|
|
|
|
isset( $parsed_block['attrs']['enhancedPagination'] ) &&
|
|
|
|
true === $parsed_block['attrs']['enhancedPagination'] &&
|
|
|
|
isset( $parsed_block['attrs']['queryId'] )
|
|
|
|
) {
|
|
|
|
$enhanced_query_stack[] = $parsed_block['attrs']['queryId'];
|
|
|
|
|
|
|
|
if ( ! isset( $render_query_callback ) ) {
|
|
|
|
/**
|
|
|
|
* Filter that disables the enhanced pagination feature during block
|
|
|
|
* rendering when a plugin block has been found inside. It does so
|
|
|
|
* by adding an attribute called `data-wp-navigation-disabled` which
|
|
|
|
* is later handled by the front-end logic.
|
|
|
|
*
|
|
|
|
* @param string $content The block content.
|
|
|
|
* @param array $block The full block, including name and attributes.
|
|
|
|
* @return string Returns the modified output of the query block.
|
|
|
|
*/
|
|
|
|
$render_query_callback = static function ( $content, $block ) use ( &$enhanced_query_stack, &$dirty_enhanced_queries, &$render_query_callback ) {
|
|
|
|
$has_enhanced_pagination =
|
|
|
|
isset( $block['attrs']['enhancedPagination'] ) &&
|
|
|
|
true === $block['attrs']['enhancedPagination'] &&
|
|
|
|
isset( $block['attrs']['queryId'] );
|
|
|
|
|
|
|
|
if ( ! $has_enhanced_pagination ) {
|
|
|
|
return $content;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( isset( $dirty_enhanced_queries[ $block['attrs']['queryId'] ] ) ) {
|
|
|
|
$p = new WP_HTML_Tag_Processor( $content );
|
|
|
|
if ( $p->next_tag() ) {
|
|
|
|
$p->set_attribute( 'data-wp-navigation-disabled', 'true' );
|
|
|
|
}
|
|
|
|
$content = $p->get_updated_html();
|
|
|
|
$dirty_enhanced_queries[ $block['attrs']['queryId'] ] = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
array_pop( $enhanced_query_stack );
|
|
|
|
|
|
|
|
if ( empty( $enhanced_query_stack ) ) {
|
|
|
|
remove_filter( 'render_block_core/query', $render_query_callback );
|
|
|
|
$render_query_callback = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $content;
|
|
|
|
};
|
|
|
|
|
|
|
|
add_filter( 'render_block_core/query', $render_query_callback, 10, 2 );
|
|
|
|
}
|
|
|
|
} elseif (
|
|
|
|
! empty( $enhanced_query_stack ) &&
|
|
|
|
isset( $block_name ) &&
|
|
|
|
( ! str_starts_with( $block_name, 'core/' ) || 'core/post-content' === $block_name )
|
|
|
|
) {
|
|
|
|
foreach ( $enhanced_query_stack as $query_id ) {
|
|
|
|
$dirty_enhanced_queries[ $query_id ] = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $parsed_block;
|
|
|
|
}
|
|
|
|
|
|
|
|
add_filter( 'render_block_data', 'block_core_query_disable_enhanced_pagination', 10, 1 );
|