at path:
ROOT
/
wp-includes
/
blocks
/
playlist.php
run:
R
W
Run
accordion
DIR
2026-09-09 19:24:57
R
W
Run
accordion-heading
DIR
2026-09-09 19:24:57
R
W
Run
accordion-item
DIR
2026-09-09 19:24:57
R
W
Run
accordion-panel
DIR
2026-09-09 19:24:57
R
W
Run
archives
DIR
2026-09-09 19:24:59
R
W
Run
audio
DIR
2026-09-09 19:08:36
R
W
Run
avatar
DIR
2026-09-09 19:08:36
R
W
Run
block
DIR
2026-09-09 19:08:36
R
W
Run
breadcrumbs
DIR
2026-09-09 19:24:57
R
W
Run
button
DIR
2026-09-09 19:08:36
R
W
Run
buttons
DIR
2026-09-09 19:08:36
R
W
Run
calendar
DIR
2026-09-09 19:08:36
R
W
Run
categories
DIR
2026-09-09 19:08:36
R
W
Run
code
DIR
2026-09-09 19:08:36
R
W
Run
column
DIR
2026-09-09 19:08:36
R
W
Run
columns
DIR
2026-09-09 19:08:36
R
W
Run
comment-author-name
DIR
2026-09-09 19:08:36
R
W
Run
comment-content
DIR
2026-09-09 19:08:36
R
W
Run
comment-date
DIR
2026-09-09 19:08:36
R
W
Run
comment-edit-link
DIR
2026-09-09 19:08:36
R
W
Run
comment-reply-link
DIR
2026-09-09 19:08:36
R
W
Run
comment-template
DIR
2026-09-09 19:08:36
R
W
Run
comments
DIR
2026-09-09 19:08:36
R
W
Run
comments-pagination
DIR
2026-09-09 19:08:36
R
W
Run
comments-pagination-next
DIR
2026-09-09 19:08:36
R
W
Run
comments-pagination-numbers
DIR
2026-09-09 19:08:36
R
W
Run
comments-pagination-previous
DIR
2026-09-09 19:08:36
R
W
Run
comments-title
DIR
2026-09-09 19:08:36
R
W
Run
cover
DIR
2026-09-09 19:08:36
R
W
Run
details
DIR
2026-09-09 19:08:36
R
W
Run
embed
DIR
2026-09-09 19:08:36
R
W
Run
file
DIR
2026-09-09 19:24:59
R
W
Run
footnotes
DIR
2026-09-09 19:08:36
R
W
Run
freeform
DIR
2026-09-09 19:08:36
R
W
Run
gallery
DIR
2026-09-09 19:08:36
R
W
Run
group
DIR
2026-09-09 19:08:36
R
W
Run
heading
DIR
2026-09-09 19:08:36
R
W
Run
home-link
DIR
2026-09-09 19:08:36
R
W
Run
html
DIR
2026-09-09 19:08:36
R
W
Run
icon
DIR
2026-09-09 19:24:57
R
W
Run
image
DIR
2026-09-09 19:24:59
R
W
Run
latest-comments
DIR
2026-09-09 19:08:36
R
W
Run
latest-posts
DIR
2026-09-09 19:08:36
R
W
Run
legacy-widget
DIR
2026-09-09 19:08:36
R
W
Run
list
DIR
2026-09-09 19:08:36
R
W
Run
list-item
DIR
2026-09-09 19:08:36
R
W
Run
loginout
DIR
2026-09-09 19:08:36
R
W
Run
math
DIR
2026-09-09 19:24:57
R
W
Run
media-text
DIR
2026-09-09 19:08:36
R
W
Run
missing
DIR
2026-09-09 19:08:36
R
W
Run
more
DIR
2026-09-09 19:08:36
R
W
Run
navigation
DIR
2026-09-09 19:24:59
R
W
Run
navigation-link
DIR
2026-09-09 19:24:57
R
W
Run
navigation-overlay-close
DIR
2026-09-09 19:24:57
R
W
Run
navigation-submenu
DIR
2026-09-09 19:08:36
R
W
Run
nextpage
DIR
2026-09-09 19:08:36
R
W
Run
page-list
DIR
2026-09-09 19:08:36
R
W
Run
page-list-item
DIR
2026-09-09 19:08:36
R
W
Run
paragraph
DIR
2026-09-09 19:08:36
R
W
Run
pattern
DIR
2026-09-09 19:08:36
R
W
Run
playlist
DIR
2026-09-09 19:24:57
R
W
Run
playlist-track
DIR
2026-09-09 19:24:57
R
W
Run
post-author
DIR
2026-09-09 19:08:36
R
W
Run
post-author-biography
DIR
2026-09-09 19:08:36
R
W
Run
post-author-name
DIR
2026-09-09 19:08:36
R
W
Run
post-comments-count
DIR
2026-09-09 19:24:57
R
W
Run
post-comments-form
DIR
2026-09-09 19:08:36
R
W
Run
post-comments-link
DIR
2026-09-09 19:24:57
R
W
Run
post-content
DIR
2026-09-09 19:08:36
R
W
Run
post-date
DIR
2026-09-09 19:08:36
R
W
Run
post-excerpt
DIR
2026-09-09 19:08:36
R
W
Run
post-featured-image
DIR
2026-09-09 19:08:36
R
W
Run
post-navigation-link
DIR
2026-09-09 19:08:36
R
W
Run
post-template
DIR
2026-09-09 19:08:36
R
W
Run
post-terms
DIR
2026-09-09 19:08:36
R
W
Run
post-time-to-read
DIR
2026-09-09 19:24:57
R
W
Run
post-title
DIR
2026-09-09 19:08:36
R
W
Run
preformatted
DIR
2026-09-09 19:08:36
R
W
Run
pullquote
DIR
2026-09-09 19:08:36
R
W
Run
query
DIR
2026-09-09 19:24:59
R
W
Run
query-no-results
DIR
2026-09-09 19:08:36
R
W
Run
query-pagination
DIR
2026-09-09 19:08:36
R
W
Run
query-pagination-next
DIR
2026-09-09 19:08:36
R
W
Run
query-pagination-numbers
DIR
2026-09-09 19:08:36
R
W
Run
query-pagination-previous
DIR
2026-09-09 19:08:36
R
W
Run
query-title
DIR
2026-09-09 19:08:36
R
W
Run
query-total
DIR
2026-09-09 19:08:36
R
W
Run
quote
DIR
2026-09-09 19:08:36
R
W
Run
read-more
DIR
2026-09-09 19:08:36
R
W
Run
rss
DIR
2026-09-09 19:08:36
R
W
Run
search
DIR
2026-09-09 19:24:59
R
W
Run
separator
DIR
2026-09-09 19:08:36
R
W
Run
shortcode
DIR
2026-09-09 19:08:36
R
W
Run
site-logo
DIR
2026-09-09 19:08:36
R
W
Run
site-tagline
DIR
2026-09-09 19:08:36
R
W
Run
site-title
DIR
2026-09-09 19:08:36
R
W
Run
social-link
DIR
2026-09-09 19:08:36
R
W
Run
social-links
DIR
2026-09-09 19:08:36
R
W
Run
spacer
DIR
2026-09-09 19:08:36
R
W
Run
tab-list
DIR
2026-09-09 19:24:57
R
W
Run
tab-panel
DIR
2026-09-09 19:24:57
R
W
Run
tab-panels
DIR
2026-09-09 19:24:57
R
W
Run
table
DIR
2026-09-09 19:08:36
R
W
Run
tabs
DIR
2026-09-09 19:24:57
R
W
Run
tag-cloud
DIR
2026-09-09 19:24:59
R
W
Run
template-part
DIR
2026-09-09 19:08:36
R
W
Run
term-count
DIR
2026-09-09 19:24:57
R
W
Run
term-description
DIR
2026-09-09 19:08:36
R
W
Run
term-name
DIR
2026-09-09 19:24:57
R
W
Run
term-template
DIR
2026-09-09 19:24:57
R
W
Run
terms-query
DIR
2026-09-09 19:24:57
R
W
Run
text-columns
DIR
2026-09-09 19:08:36
R
W
Run
verse
DIR
2026-09-09 19:08:36
R
W
Run
video
DIR
2026-09-09 19:08:36
R
W
Run
widget-group
DIR
2026-09-09 19:08:36
R
W
Run
accordion-item.php
2.98 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
accordion.php
1.12 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
archives.php
4.28 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
avatar.php
5.51 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
block.php
3.05 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
blocks-json.php
205.72 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
breadcrumbs.php
18.61 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
button.php
4.11 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
calendar.php
5.93 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
categories.php
4.82 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
comment-author-name.php
2.09 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
comment-content.php
2.4 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
comment-date.php
1.82 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
comment-edit-link.php
1.67 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
comment-reply-link.php
2.03 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
comment-template.php
4.39 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
comments-pagination-next.php
1.88 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
comments-pagination-numbers.php
1.59 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
comments-pagination-previous.php
1.75 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
comments-pagination.php
1.23 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
comments-title.php
2.72 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
comments.php
6.63 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
cover.php
7.23 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
details.php
1.46 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
file.php
1.83 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
footnotes.php
3.73 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
gallery.php
21.82 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
heading.php
1.27 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
home-link.php
4.59 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
icon.php
4.27 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
image.php
17.23 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
index.php
4.98 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
latest-comments.php
5.49 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
latest-posts.php
10.21 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
legacy-widget.php
3.92 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
list.php
1.24 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
loginout.php
2.07 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
media-text.php
4.2 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
navigation-link.php
16.26 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
navigation-overlay-close.php
1.72 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
navigation-submenu.php
10.79 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
navigation.php
69.23 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
page-list-item.php
361 By
2026-09-09 19:08:36
R
W
Run
Delete
Rename
page-list.php
13.54 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
paragraph.php
1.11 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
pattern.php
1.75 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
playlist-track.php
2.43 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
playlist.php
6.46 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
post-author-biography.php
1.49 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
post-author-name.php
1.92 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
post-author.php
2.67 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
post-comments-count.php
1.25 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
post-comments-form.php
2.74 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
post-comments-link.php
2.18 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
post-content.php
2.61 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
post-date.php
3.61 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
post-excerpt.php
4.21 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
post-featured-image.php
9.23 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
post-navigation-link.php
4.69 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
post-template.php
5.8 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
post-terms.php
3.55 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
post-time-to-read.php
6.26 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
post-title.php
2.09 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
query-no-results.php
1.8 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
query-pagination-next.php
3.59 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
query-pagination-numbers.php
4.59 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
query-pagination-previous.php
3.39 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
query-pagination.php
1.15 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
query-title.php
2.71 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
query-total.php
2.41 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
query.php
5.56 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
read-more.php
1.8 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
require-dynamic-blocks.php
5.13 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
require-static-blocks.php
535 By
2026-09-09 19:24:57
R
W
Run
Delete
Rename
rss.php
4.5 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
search.php
25 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
shortcode.php
735 By
2026-09-09 19:08:36
R
W
Run
Delete
Rename
site-logo.php
6.19 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
site-tagline.php
1.17 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
site-title.php
1.82 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
social-link.php
66.02 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
tab-list.php
2.27 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
tab-panel.php
1.63 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
tabs.php
3.86 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
tag-cloud.php
1.55 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
template-part.php
9.73 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
term-count.php
1.8 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
term-description.php
1.73 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
term-name.php
1.99 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
term-template.php
4.41 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
video.php
2.67 KB
2026-09-09 19:24:57
R
W
Run
Delete
Rename
widget-group.php
2.38 KB
2026-09-09 19:08:36
R
W
Run
Delete
Rename
error_log
up
📄
playlist.php
Save
<?php /** * Server-side rendering of the `core/playlist` block. * * @package WordPress */ /** * Renders the `core/playlist` block on server. * * @since 7.1.0 * * @param array $attributes The block attributes. * @param string $content The block content. * @param WP_Block $block The block instance. * * @return string Returns the Playlist. */ function render_block_core_playlist( $attributes, $content, $block ) { $playlist_id = wp_unique_id( 'playlist-' ); $playlist_tracks = array(); $tracks_data = array(); $show_play_button_artwork = ! empty( $attributes['showPlayButtonArtwork'] ); // Parse inner blocks to extract track data. // This approach avoids duplicating track data in the HTML output. if ( ! empty( $block->inner_blocks ) ) { foreach ( $block->inner_blocks as $inner_block ) { if ( 'core/playlist-track' === $inner_block->name ) { $track_attributes = $inner_block->attributes; if ( empty( $track_attributes['id'] ) ) { continue; } $track_id = 'track-' . count( $playlist_tracks ); $playlist_tracks[] = $track_id; // Extract track metadata from block attributes. $title = isset( $track_attributes['title'] ) && ! empty( $track_attributes['title'] ) ? $track_attributes['title'] : __( 'Unknown title' ); $artist = $track_attributes['artist'] ?? ''; $album = $track_attributes['album'] ?? ''; $image = $track_attributes['image'] ?? ''; $image_alt = $track_attributes['imageAlt'] ?? ''; $url = $track_attributes['src'] ?? ''; $aria_label = $title; if ( $title && $artist && $album ) { $aria_label = sprintf( /* translators: %1$s: track title, %2$s: artist name, %3$s: album name. */ _x( '%1$s by %2$s from the album %3$s', 'track title, artist name, album name' ), $title, $artist, $album ); } // Data is passed to wp_interactivity_state() which JSON-encodes it, // so we use wp_strip_all_tags() instead of esc_html() to prevent // HTML injection without double-encoding. URLs still use esc_url(). $tracks_data[ $track_id ] = array( 'url' => esc_url( $url ), 'title' => wp_strip_all_tags( $title ), 'artist' => wp_strip_all_tags( $artist ), 'album' => wp_strip_all_tags( $album ), 'image' => esc_url( $image ), 'imageAlt' => wp_strip_all_tags( $image_alt ), 'ariaLabel' => wp_strip_all_tags( $aria_label ), ); } } } if ( empty( $playlist_tracks ) ) { return ''; } wp_enqueue_script_module( '@wordpress/block-library/playlist/view' ); // Add the playlist tracks to the global state, // but keep them isolated from other playlists with the help of playlistId. wp_interactivity_state( 'core/playlist', array( 'playlists' => array( $playlist_id => array( 'tracks' => $tracks_data, ), ), ) ); // Add waveform player container with translated button labels. $label_play = esc_attr__( 'Play' ); $label_pause = esc_attr__( 'Pause' ); $label_seek = esc_attr__( 'Seek' ); /* translators: %1$s: current audio time, %2$s: total audio duration. */ $label_seek_value = esc_attr_x( '%1$s of %2$s', 'audio current time of total duration' ); $waveform_color_attribute = ''; $waveform_gradient_attribute = ''; $waveform_background_color_attribute = ''; $waveform_background_gradient_attribute = ''; if ( ! empty( $attributes['waveformColor'] ) ) { $waveform_color_attribute = sprintf( ' data-waveform-player-color="%s"', esc_attr( $attributes['waveformColor'] ) ); } if ( ! empty( $attributes['waveformGradient'] ) ) { $waveform_gradient_attribute = sprintf( ' data-waveform-player-gradient="%s"', esc_attr( $attributes['waveformGradient'] ) ); } if ( ! empty( $attributes['waveformBackgroundColor'] ) ) { $waveform_background_color_attribute = sprintf( ' data-waveform-player-background-color="%s"', esc_attr( $attributes['waveformBackgroundColor'] ) ); } if ( ! empty( $attributes['waveformBackgroundGradient'] ) ) { $waveform_background_gradient_attribute = sprintf( ' data-waveform-player-background-gradient="%s"', esc_attr( $attributes['waveformBackgroundGradient'] ) ); } $html = '<div class="wp-block-playlist__waveform-player"' . $waveform_color_attribute . $waveform_gradient_attribute . $waveform_background_color_attribute . $waveform_background_gradient_attribute . ' data-wp-watch="callbacks.initWaveformPlayer" data-label-play="' . $label_play . '" data-label-pause="' . $label_pause . '" data-label-seek="' . $label_seek . '" data-label-seek-value="' . $label_seek_value . '" ></div>'; // Add the waveform player container inside the figure. $figure = null; preg_match( '/<figure[^>]*>/', $content, $figure ); if ( ! empty( $figure[0] ) ) { $content = preg_replace( '/(<figure[^>]*>)/', '$1' . $html, $content, 1 ); } $processor = new WP_HTML_Tag_Processor( $content ); $processor->next_tag( 'figure' ); $processor->set_attribute( 'data-wp-interactive', 'core/playlist' ); $waveform_style = $attributes['waveformStyle'] ?? 'bars'; $processor->set_attribute( 'data-wp-context', wp_json_encode( array( 'playlistId' => $playlist_id, 'currentId' => $playlist_tracks[0], 'isPlaying' => false, 'tracks' => $playlist_tracks, 'waveformStyle' => $waveform_style, 'showPlayButtonArtwork' => $show_play_button_artwork, 'labelPauseTrack' => __( 'Pause' ), 'labelSelectTrack' => __( 'Play' ), ) ) ); // Track IDs are render-time only. Add them after inner blocks have rendered // so track buttons can update the Interactivity API state without storing // persistent unique IDs in post content. $track_index = 0; while ( $processor->next_tag( array( 'class_name' => 'wp-block-playlist-track__button' ) ) ) { $track_id = $playlist_tracks[ $track_index ] ?? null; if ( null === $track_id ) { break; } $processor->set_attribute( 'data-wp-context', wp_json_encode( array( 'trackId' => $track_id, ) ) ); ++$track_index; } return $processor->get_updated_html(); } /** * Registers the `core/playlist` block on server. * * @since 7.1.0 */ function register_block_core_playlist() { register_block_type_from_metadata( __DIR__ . '/playlist', array( 'render_callback' => 'render_block_core_playlist', ) ); } add_action( 'init', 'register_block_core_playlist' );