| [ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Tab Panel Block 4 * 5 * @package WordPress 6 */ 7 8 /** 9 * Render callback for core/tab-panel. 10 * 11 * @since 7.1.0 12 * 13 * @param array $attributes Block attributes. 14 * @param string $content Block content. 15 * @param \WP_Block $block Block instance. 16 * 17 * @return string Updated HTML. 18 */ 19 function block_core_tab_panel_render( array $attributes, string $content, \WP_Block $block ): string { 20 $tabs_id = $block->context['core/tabs-id'] ?? ''; 21 22 static $tab_counters = array(); 23 24 if ( ! isset( $tab_counters[ $tabs_id ] ) ) { 25 $tab_counters[ $tabs_id ] = 1; 26 } 27 28 $tab_number = $tab_counters[ $tabs_id ]; 29 ++$tab_counters[ $tabs_id ]; 30 31 $tag_processor = new WP_HTML_Tag_Processor( $content ); 32 $tag_processor->next_tag( array( 'class_name' => 'wp-block-tab-panel' ) ); 33 34 // Use the user's custom anchor if present, otherwise fall back to 35 // the generated position-based ID. 36 $tab_id = (string) $tag_processor->get_attribute( 'id' ); 37 if ( empty( $tab_id ) ) { 38 $tab_id = ! empty( $tabs_id ) 39 ? $tabs_id . '-tab-' . $tab_number 40 : 'tab-' . $tab_number; 41 $tag_processor->set_attribute( 'id', $tab_id ); 42 } 43 44 $tag_processor->set_attribute( 'aria-labelledby', 'tab__' . $tab_id ); 45 46 /* 47 * Hiding a panel is left to the client, which is why `hidden` is bound to a 48 * state getter the server cannot resolve rather than set here: a visitor 49 * whose browser never runs the block's script is then given the content of 50 * every panel instead of none of it. `core/accordion` works the same way. 51 */ 52 $tag_processor->set_attribute( 'data-wp-bind--hidden', 'state.isHidden' ); 53 $tag_processor->set_attribute( 'data-wp-bind--tabindex', 'state.tabIndexAttribute' ); 54 $tag_processor->set_attribute( 'data-wp-on--beforematch', 'actions.handleBeforeMatch' ); 55 56 return (string) $tag_processor->get_updated_html(); 57 } 58 59 /** 60 * Registers the `core/tab-panel` block on the server. 61 * 62 * @hook init 63 * 64 * @since 7.1.0 65 */ 66 function register_block_core_tab_panel() { 67 register_block_type_from_metadata( 68 __DIR__ . '/tab-panel', 69 array( 70 'render_callback' => 'block_core_tab_panel_render', 71 ) 72 ); 73 } 74 add_action( 'init', 'register_block_core_tab_panel' );
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated : Mon Sep 14 08:20:31 2026 | Cross-referenced by PHPXref |