[ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Server-side rendering of the `core/avatar` block. 4 * 5 * @package WordPress 6 */ 7 8 /** 9 * Renders the `core/avatar` block on the server. 10 * 11 * @since 6.0.0 12 * 13 * @param array $attributes Block attributes. 14 * @param string $content Block default content. 15 * @param WP_Block $block Block instance. 16 * @return string Return the avatar. 17 */ 18 function render_block_core_avatar( $attributes, $content, $block ) { 19 $size = isset( $attributes['size'] ) ? $attributes['size'] : 96; 20 $wrapper_attributes = get_block_wrapper_attributes(); 21 $border_attributes = get_block_core_avatar_border_attributes( $attributes ); 22 23 // Class gets passed through `esc_attr` via `get_avatar`. 24 $image_classes = ! empty( $border_attributes['class'] ) 25 ? "wp-block-avatar__image {$border_attributes['class']}" 26 : 'wp-block-avatar__image'; 27 28 // Unlike class, `get_avatar` doesn't filter the styles via `esc_attr`. 29 // The style engine does pass the border styles through 30 // `safecss_filter_attr` however. 31 $image_styles = ! empty( $border_attributes['style'] ) 32 ? sprintf( ' style="%s"', esc_attr( $border_attributes['style'] ) ) 33 : ''; 34 35 if ( ! isset( $block->context['commentId'] ) ) { 36 if ( isset( $attributes['userId'] ) ) { 37 $author_id = $attributes['userId']; 38 } elseif ( isset( $block->context['postId'] ) ) { 39 $author_id = get_post_field( 'post_author', $block->context['postId'] ); 40 } else { 41 $author_id = get_query_var( 'author' ); 42 } 43 44 if ( empty( $author_id ) ) { 45 return ''; 46 } 47 48 $author_name = get_the_author_meta( 'display_name', $author_id ); 49 // translators: %s: Author name. 50 $alt = sprintf( __( '%s Avatar' ), $author_name ); 51 $avatar_block = get_avatar( 52 $author_id, 53 $size, 54 '', 55 $alt, 56 array( 57 'extra_attr' => $image_styles, 58 'class' => $image_classes, 59 ) 60 ); 61 if ( isset( $attributes['isLink'] ) && $attributes['isLink'] ) { 62 $label = ''; 63 if ( '_blank' === $attributes['linkTarget'] ) { 64 // translators: %s is the Author name. 65 $label = 'aria-label="' . esc_attr( sprintf( __( '(%s author archive, opens in a new tab)' ), $author_name ) ) . '"'; 66 } 67 // translators: 1: Author archive link. 2: Link target. %3$s Aria label. %4$s Avatar image. 68 $avatar_block = sprintf( '<a href="%1$s" target="%2$s" %3$s class="wp-block-avatar__link">%4$s</a>', esc_url( get_author_posts_url( $author_id ) ), esc_attr( $attributes['linkTarget'] ), $label, $avatar_block ); 69 } 70 return sprintf( '<div %1s>%2s</div>', $wrapper_attributes, $avatar_block ); 71 } 72 $comment = get_comment( $block->context['commentId'] ); 73 if ( ! $comment ) { 74 return ''; 75 } 76 /* translators: %s: Author name. */ 77 $alt = sprintf( __( '%s Avatar' ), $comment->comment_author ); 78 $avatar_block = get_avatar( 79 $comment, 80 $size, 81 '', 82 $alt, 83 array( 84 'extra_attr' => $image_styles, 85 'class' => $image_classes, 86 ) 87 ); 88 if ( isset( $attributes['isLink'] ) && $attributes['isLink'] && isset( $comment->comment_author_url ) && '' !== $comment->comment_author_url ) { 89 $label = ''; 90 if ( '_blank' === $attributes['linkTarget'] ) { 91 // translators: %s: Comment author name. 92 $label = 'aria-label="' . esc_attr( sprintf( __( '(%s website link, opens in a new tab)' ), $comment->comment_author ) ) . '"'; 93 } 94 $avatar_block = sprintf( '<a href="%1$s" target="%2$s" %3$s class="wp-block-avatar__link">%4$s</a>', esc_url( $comment->comment_author_url ), esc_attr( $attributes['linkTarget'] ), $label, $avatar_block ); 95 } 96 return sprintf( '<div %1s>%2s</div>', $wrapper_attributes, $avatar_block ); 97 } 98 99 /** 100 * Generates class names and styles to apply the border support styles for 101 * the Avatar block. 102 * 103 * @since 6.3.0 104 * 105 * @param array $attributes The block attributes. 106 * @return array The border-related classnames and styles for the block. 107 */ 108 function get_block_core_avatar_border_attributes( $attributes ) { 109 $border_styles = array(); 110 $sides = array( 'top', 'right', 'bottom', 'left' ); 111 112 // Border radius. 113 if ( isset( $attributes['style']['border']['radius'] ) ) { 114 $border_styles['radius'] = $attributes['style']['border']['radius']; 115 } 116 117 // Border style. 118 if ( isset( $attributes['style']['border']['style'] ) ) { 119 $border_styles['style'] = $attributes['style']['border']['style']; 120 } 121 122 // Border width. 123 if ( isset( $attributes['style']['border']['width'] ) ) { 124 $border_styles['width'] = $attributes['style']['border']['width']; 125 } 126 127 // Border color. 128 $preset_color = array_key_exists( 'borderColor', $attributes ) ? "var:preset|color|{$attributes['borderColor']}" : null; 129 $custom_color = $attributes['style']['border']['color'] ?? null; 130 $border_styles['color'] = $preset_color ? $preset_color : $custom_color; 131 132 // Individual border styles e.g. top, left etc. 133 foreach ( $sides as $side ) { 134 $border = $attributes['style']['border'][ $side ] ?? null; 135 $border_styles[ $side ] = array( 136 'color' => isset( $border['color'] ) ? $border['color'] : null, 137 'style' => isset( $border['style'] ) ? $border['style'] : null, 138 'width' => isset( $border['width'] ) ? $border['width'] : null, 139 ); 140 } 141 142 $styles = wp_style_engine_get_styles( array( 'border' => $border_styles ) ); 143 $attributes = array(); 144 if ( ! empty( $styles['classnames'] ) ) { 145 $attributes['class'] = $styles['classnames']; 146 } 147 if ( ! empty( $styles['css'] ) ) { 148 $attributes['style'] = $styles['css']; 149 } 150 return $attributes; 151 } 152 153 /** 154 * Registers the `core/avatar` block on the server. 155 * 156 * @since 6.0.0 157 */ 158 function register_block_core_avatar() { 159 register_block_type_from_metadata( 160 __DIR__ . '/avatar', 161 array( 162 'render_callback' => 'render_block_core_avatar', 163 ) 164 ); 165 } 166 add_action( 'init', 'register_block_core_avatar' );
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated : Thu Nov 21 08:20:01 2024 | Cross-referenced by PHPXref |