[ 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 is the 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$s: Author archive link. %2$s: 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 is the Comment 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 is the Comment Author name. 92 $label = 'aria-label="' . esc_attr( sprintf( __( '(%s website link, opens in a new tab)' ), $comment->comment_author ) ) . '"'; 93 } 94 // translators: %1$s: Comment Author website link. %2$s: Link target. %3$s Aria label. %4$s Avatar image. 95 $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 ); 96 } 97 return sprintf( '<div %1s>%2s</div>', $wrapper_attributes, $avatar_block ); 98 } 99 100 /** 101 * Generates class names and styles to apply the border support styles for 102 * the Avatar block. 103 * 104 * @since 6.3.0 105 * 106 * @param array $attributes The block attributes. 107 * @return array The border-related classnames and styles for the block. 108 */ 109 function get_block_core_avatar_border_attributes( $attributes ) { 110 $border_styles = array(); 111 $sides = array( 'top', 'right', 'bottom', 'left' ); 112 113 // Border radius. 114 if ( isset( $attributes['style']['border']['radius'] ) ) { 115 $border_styles['radius'] = $attributes['style']['border']['radius']; 116 } 117 118 // Border style. 119 if ( isset( $attributes['style']['border']['style'] ) ) { 120 $border_styles['style'] = $attributes['style']['border']['style']; 121 } 122 123 // Border width. 124 if ( isset( $attributes['style']['border']['width'] ) ) { 125 $border_styles['width'] = $attributes['style']['border']['width']; 126 } 127 128 // Border color. 129 $preset_color = array_key_exists( 'borderColor', $attributes ) ? "var:preset|color|{$attributes['borderColor']}" : null; 130 $custom_color = $attributes['style']['border']['color'] ?? null; 131 $border_styles['color'] = $preset_color ? $preset_color : $custom_color; 132 133 // Individual border styles e.g. top, left etc. 134 foreach ( $sides as $side ) { 135 $border = $attributes['style']['border'][ $side ] ?? null; 136 $border_styles[ $side ] = array( 137 'color' => isset( $border['color'] ) ? $border['color'] : null, 138 'style' => isset( $border['style'] ) ? $border['style'] : null, 139 'width' => isset( $border['width'] ) ? $border['width'] : null, 140 ); 141 } 142 143 $styles = wp_style_engine_get_styles( array( 'border' => $border_styles ) ); 144 $attributes = array(); 145 if ( ! empty( $styles['classnames'] ) ) { 146 $attributes['class'] = $styles['classnames']; 147 } 148 if ( ! empty( $styles['css'] ) ) { 149 $attributes['style'] = $styles['css']; 150 } 151 return $attributes; 152 } 153 154 /** 155 * Registers the `core/avatar` block on the server. 156 * 157 * @since 6.0.0 158 */ 159 function register_block_core_avatar() { 160 register_block_type_from_metadata( 161 __DIR__ . '/avatar', 162 array( 163 'render_callback' => 'render_block_core_avatar', 164 ) 165 ); 166 } 167 add_action( 'init', 'register_block_core_avatar' );
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated : Thu Oct 24 08:20:01 2024 | Cross-referenced by PHPXref |