diff -r 48c4eec2b7e6 -r 8c2e4d02f4ef wp/wp-includes/blocks/categories.php --- a/wp/wp-includes/blocks/categories.php Fri Sep 05 18:40:08 2025 +0200 +++ b/wp/wp-includes/blocks/categories.php Fri Sep 05 18:52:52 2025 +0200 @@ -9,20 +9,26 @@ * Renders the `core/categories` block on server. * * @since 5.0.0 + * @since 6.7.0 Enable client-side rendering if enhancedPagination context is true. * - * @param array $attributes The block attributes. + * @param array $attributes The block attributes. + * @param string $content Block default content. + * @param WP_Block $block Block instance. * * @return string Returns the categories list/dropdown markup. */ -function render_block_core_categories( $attributes ) { +function render_block_core_categories( $attributes, $content, $block ) { static $block_id = 0; ++$block_id; + $taxonomy = get_taxonomy( $attributes['taxonomy'] ); + $args = array( 'echo' => false, 'hierarchical' => ! empty( $attributes['showHierarchy'] ), 'orderby' => 'name', 'show_count' => ! empty( $attributes['showPostCounts'] ), + 'taxonomy' => $attributes['taxonomy'], 'title_li' => '', 'hide_empty' => empty( $attributes['showEmpty'] ), ); @@ -33,10 +39,20 @@ if ( ! empty( $attributes['displayAsDropdown'] ) ) { $id = 'wp-block-categories-' . $block_id; $args['id'] = $id; - $args['show_option_none'] = __( 'Select Category' ); - $wrapper_markup = '
%2$s
'; - $items_markup = wp_dropdown_categories( $args ); - $type = 'dropdown'; + $args['name'] = $taxonomy->query_var; + $args['value_field'] = 'slug'; + $args['show_option_none'] = sprintf( + /* translators: %s: taxonomy's singular name */ + __( 'Select %s' ), + $taxonomy->labels->singular_name + ); + + $show_label = empty( $attributes['showLabel'] ) ? ' screen-reader-text' : ''; + $default_label = $taxonomy->label; + $label_text = ! empty( $attributes['label'] ) ? wp_kses_post( $attributes['label'] ) : $default_label; + $wrapper_markup = '
%2$s
'; + $items_markup = wp_dropdown_categories( $args ); + $type = 'dropdown'; if ( ! is_admin() ) { // Inject the dropdown script immediately after the select dropdown. @@ -48,9 +64,19 @@ ); } } else { + $args['show_option_none'] = $taxonomy->labels->no_terms; + $wrapper_markup = ''; $items_markup = wp_list_categories( $args ); $type = 'list'; + + if ( ! empty( $block->context['enhancedPagination'] ) ) { + $p = new WP_HTML_Tag_Processor( $items_markup ); + while ( $p->next_tag( 'a' ) ) { + $p->set_attribute( 'data-wp-on--click', 'core/query::actions.navigate' ); + } + $items_markup = $p->get_updated_html(); + } } $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => "wp-block-categories-{$type}" ) ); @@ -78,8 +104,8 @@ ( function() { var dropdown = document.getElementById( '' ); function onCatChange() { - if ( dropdown.options[ dropdown.selectedIndex ].value > 0 ) { - location.href = "/?cat=" + dropdown.options[ dropdown.selectedIndex ].value; + if ( dropdown.options[ dropdown.selectedIndex ].value !== -1 ) { + location.href = "/?" + dropdown.name + '=' + dropdown.options[ dropdown.selectedIndex ].value; } } dropdown.onchange = onCatChange;