| [ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Server-side rendering of the `core/icon` block. 4 * 5 * @package WordPress 6 */ 7 8 /** 9 * Renders the `core/icon` block on server. 10 * 11 * @since 7.0.0 12 * 13 * @param array $attributes The block attributes. 14 * 15 * @return string Returns the Icon. 16 */ 17 function render_block_core_icon( $attributes ) { 18 if ( empty( $attributes['icon'] ) ) { 19 return; 20 } 21 22 $registry = WP_Icons_Registry::get_instance(); 23 $icon = $registry->get_registered_icon( $attributes['icon'] ); 24 25 if ( is_null( $icon ) ) { 26 return; 27 } 28 29 // Text color and background color. 30 $color_styles = array(); 31 32 $preset_text_color = array_key_exists( 'textColor', $attributes ) ? "var:preset|color|{$attributes['textColor']}" : null; 33 $custom_text_color = $attributes['style']['color']['text'] ?? null; 34 $color_styles['text'] = $preset_text_color ? $preset_text_color : $custom_text_color; 35 36 $preset_background_color = array_key_exists( 'backgroundColor', $attributes ) ? "var:preset|color|{$attributes['backgroundColor']}" : null; 37 $custom_background_color = $attributes['style']['color']['background'] ?? null; 38 $color_styles['background'] = $preset_background_color ? $preset_background_color : $custom_background_color; 39 40 // Border. 41 $border_styles = array(); 42 $sides = array( 'top', 'right', 'bottom', 'left' ); 43 44 if ( isset( $attributes['style']['border']['radius'] ) ) { 45 $border_styles['radius'] = $attributes['style']['border']['radius']; 46 } 47 if ( isset( $attributes['style']['border']['style'] ) ) { 48 $border_styles['style'] = $attributes['style']['border']['style']; 49 } 50 if ( isset( $attributes['style']['border']['width'] ) ) { 51 $border_styles['width'] = $attributes['style']['border']['width']; 52 } 53 54 $preset_color = array_key_exists( 'borderColor', $attributes ) ? "var:preset|color|{$attributes['borderColor']}" : null; 55 $custom_color = $attributes['style']['border']['color'] ?? null; 56 $border_styles['color'] = $preset_color ? $preset_color : $custom_color; 57 58 foreach ( $sides as $side ) { 59 $border = $attributes['style']['border'][ $side ] ?? null; 60 $border_styles[ $side ] = array( 61 'color' => $border['color'] ?? null, 62 'style' => $border['style'] ?? null, 63 'width' => $border['width'] ?? null, 64 ); 65 } 66 67 // Spacing (Padding). 68 $spacing_styles = array(); 69 if ( isset( $attributes['style']['spacing']['padding'] ) ) { 70 $spacing_styles['padding'] = $attributes['style']['spacing']['padding']; 71 } 72 73 // Dimensions (Width). 74 $dimensions_styles = array(); 75 if ( isset( $attributes['style']['dimensions']['width'] ) ) { 76 $dimensions_styles['width'] = $attributes['style']['dimensions']['width']; 77 } 78 79 // Generate styles and classes. 80 $styles = wp_style_engine_get_styles( 81 array( 82 'color' => $color_styles, 83 'border' => $border_styles, 84 'spacing' => $spacing_styles, 85 'dimensions' => $dimensions_styles, 86 ), 87 ); 88 89 $processor = new WP_HTML_Tag_Processor( $icon['content'] ); 90 $processor->next_tag( 'svg' ); 91 92 if ( ! empty( $styles['css'] ) ) { 93 $processor->set_attribute( 'style', $styles['css'] ); 94 } 95 if ( ! empty( $styles['classnames'] ) ) { 96 $processor->add_class( $styles['classnames'] ); 97 } 98 99 $aria_label = ! empty( $attributes['ariaLabel'] ) ? $attributes['ariaLabel'] : ''; 100 101 if ( ! $aria_label ) { 102 // Icon is decorative, hide it from screen readers. 103 $processor->set_attribute( 'aria-hidden', 'true' ); 104 $processor->set_attribute( 'focusable', 'false' ); 105 } else { 106 $processor->set_attribute( 'role', 'img' ); 107 $processor->set_attribute( 'aria-label', $aria_label ); 108 } 109 110 // Return the updated SVG markup. 111 $svg = $processor->get_updated_html(); 112 $attributes = get_block_wrapper_attributes(); 113 return sprintf( '<div %s>%s</div>', $attributes, $svg ); 114 } 115 116 117 /** 118 * Registers the `core/icon` block on server. 119 * 120 * @since 7.0.0 121 */ 122 function register_block_core_icon() { 123 register_block_type_from_metadata( 124 __DIR__ . '/icon', 125 array( 126 'render_callback' => 'render_block_core_icon', 127 ) 128 ); 129 } 130 add_action( 'init', 'register_block_core_icon' );
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated : Sat Jul 4 08:20:12 2026 | Cross-referenced by PHPXref |