[ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Server-side rendering of the `core/media-text` block. 4 * 5 * @package WordPress 6 */ 7 8 /** 9 * Renders the `core/media-text` block on server. 10 * 11 * @since 6.6.0 12 * 13 * @param array $attributes The block attributes. 14 * @param string $content The block rendered content. 15 * 16 * @return string Returns the Media & Text block markup, if useFeaturedImage is true. 17 */ 18 function render_block_core_media_text( $attributes, $content ) { 19 if ( false === $attributes['useFeaturedImage'] ) { 20 return $content; 21 } 22 23 if ( in_the_loop() ) { 24 update_post_thumbnail_cache(); 25 } 26 27 $current_featured_image = get_the_post_thumbnail_url(); 28 if ( ! $current_featured_image ) { 29 return $content; 30 } 31 32 $media_tag_processor = new WP_HTML_Tag_Processor( $content ); 33 $wrapping_figure_query = array( 34 'tag_name' => 'figure', 35 'class_name' => 'wp-block-media-text__media', 36 ); 37 $has_media_on_right = isset( $attributes['mediaPosition'] ) && 'right' === $attributes['mediaPosition']; 38 $image_fill = isset( $attributes['imageFill'] ) && $attributes['imageFill']; 39 $focal_point = isset( $attributes['focalPoint'] ) ? round( $attributes['focalPoint']['x'] * 100 ) . '% ' . round( $attributes['focalPoint']['y'] * 100 ) . '%' : '50% 50%'; 40 $unique_id = 'wp-block-media-text__media-' . wp_unique_id(); 41 42 if ( $has_media_on_right ) { 43 // Loop through all the figure tags and set a bookmark on the last figure tag. 44 while ( $media_tag_processor->next_tag( $wrapping_figure_query ) ) { 45 $media_tag_processor->set_bookmark( 'last_figure' ); 46 } 47 if ( $media_tag_processor->has_bookmark( 'last_figure' ) ) { 48 $media_tag_processor->seek( 'last_figure' ); 49 if ( $image_fill ) { 50 $media_tag_processor->set_attribute( 'style', 'background-image:url(' . esc_url( $current_featured_image ) . ');background-position:' . $focal_point . ';' ); 51 } else { 52 // Insert a unique ID to identify the figure tag. 53 $media_tag_processor->set_attribute( 'id', $unique_id ); 54 } 55 } 56 } else { 57 if ( $media_tag_processor->next_tag( $wrapping_figure_query ) ) { 58 if ( $image_fill ) { 59 $media_tag_processor->set_attribute( 'style', 'background-image:url(' . esc_url( $current_featured_image ) . ');background-position:' . $focal_point . ';' ); 60 } else { 61 // Insert a unique ID to identify the figure tag. 62 $media_tag_processor->set_attribute( 'id', $unique_id ); 63 } 64 } 65 } 66 67 $content = $media_tag_processor->get_updated_html(); 68 69 // If the image is not set to fill, add the image tag inside the figure tag, 70 // and update the image attributes in order to display the featured image. 71 if ( ! $image_fill ) { 72 $media_size_slug = isset( $attributes['mediaSizeSlug'] ) ? $attributes['mediaSizeSlug'] : 'full'; 73 $image_tag = '<img class="wp-block-media-text__featured_image">'; 74 $content = preg_replace( 75 '/(<figure\s+id="' . preg_quote( $unique_id, '/' ) . '"\s+class="wp-block-media-text__media"\s*>)/', 76 '$1' . $image_tag, 77 $content 78 ); 79 80 $image_tag_processor = new WP_HTML_Tag_Processor( $content ); 81 if ( $image_tag_processor->next_tag( 82 array( 83 'tag_name' => 'figure', 84 'id' => $unique_id, 85 ) 86 ) ) { 87 // The ID is only used to ensure that the correct figure tag is selected, 88 // and can now be removed. 89 $image_tag_processor->remove_attribute( 'id' ); 90 if ( $image_tag_processor->next_tag( 91 array( 92 'tag_name' => 'img', 93 'class_name' => 'wp-block-media-text__featured_image', 94 ) 95 ) ) { 96 $image_tag_processor->set_attribute( 'src', esc_url( $current_featured_image ) ); 97 $image_tag_processor->set_attribute( 'class', 'wp-image-' . get_post_thumbnail_id() . ' size-' . $media_size_slug ); 98 $image_tag_processor->set_attribute( 'alt', trim( strip_tags( get_post_meta( get_post_thumbnail_id(), '_wp_attachment_image_alt', true ) ) ) ); 99 100 $content = $image_tag_processor->get_updated_html(); 101 } 102 } 103 } 104 105 return $content; 106 } 107 108 /** 109 * Registers the `core/media-text` block renderer on server. 110 * 111 * @since 6.6.0 112 */ 113 function register_block_core_media_text() { 114 register_block_type_from_metadata( 115 __DIR__ . '/media-text', 116 array( 117 'render_callback' => 'render_block_core_media_text', 118 ) 119 ); 120 } 121 add_action( 'init', 'register_block_core_media_text' );
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated : Sat Sep 14 08:20:02 2024 | Cross-referenced by PHPXref |