Widgets: Introduce media widgets for images, audio, and video with extensible base for additional media widgets in the future.
The last time a new widget was introduced, Vuvuzelas were a thing, Angry Birds started taking over phones, and WordPress stopped shipping with Kubrick. Seven years and 17 releases without new widgets have been enough, time to spice up your sidebar!
Props westonruter, melchoyce, obenland, timmydcrawford, adamsilverstein, gonom9, wonderboymusic, Fab1en, DrewAPicture, sirbrillig, joen, matias, samikeijonen, afercia, celloexpressions, designsimply, michelleweber, ranh, kjellr, karmatosed.
Fixes #32417, #39993, #39994, #39995.
Built from https://develop.svn.wordpress.org/trunk@40640
git-svn-id: http://core.svn.wordpress.org/trunk@40501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-05-11 17:11:44 -04:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Widget API: WP_Widget_Media_Audio class
|
|
|
|
*
|
|
|
|
* @package WordPress
|
|
|
|
* @subpackage Widgets
|
|
|
|
* @since 4.8.0
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Core class that implements an audio widget.
|
|
|
|
*
|
|
|
|
* @since 4.8.0
|
|
|
|
*
|
2019-05-14 16:23:06 -04:00
|
|
|
* @see WP_Widget_Media
|
Widgets: Introduce media widgets for images, audio, and video with extensible base for additional media widgets in the future.
The last time a new widget was introduced, Vuvuzelas were a thing, Angry Birds started taking over phones, and WordPress stopped shipping with Kubrick. Seven years and 17 releases without new widgets have been enough, time to spice up your sidebar!
Props westonruter, melchoyce, obenland, timmydcrawford, adamsilverstein, gonom9, wonderboymusic, Fab1en, DrewAPicture, sirbrillig, joen, matias, samikeijonen, afercia, celloexpressions, designsimply, michelleweber, ranh, kjellr, karmatosed.
Fixes #32417, #39993, #39994, #39995.
Built from https://develop.svn.wordpress.org/trunk@40640
git-svn-id: http://core.svn.wordpress.org/trunk@40501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-05-11 17:11:44 -04:00
|
|
|
* @see WP_Widget
|
|
|
|
*/
|
|
|
|
class WP_Widget_Media_Audio extends WP_Widget_Media {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructor.
|
|
|
|
*
|
2019-04-02 18:13:52 -04:00
|
|
|
* @since 4.8.0
|
Widgets: Introduce media widgets for images, audio, and video with extensible base for additional media widgets in the future.
The last time a new widget was introduced, Vuvuzelas were a thing, Angry Birds started taking over phones, and WordPress stopped shipping with Kubrick. Seven years and 17 releases without new widgets have been enough, time to spice up your sidebar!
Props westonruter, melchoyce, obenland, timmydcrawford, adamsilverstein, gonom9, wonderboymusic, Fab1en, DrewAPicture, sirbrillig, joen, matias, samikeijonen, afercia, celloexpressions, designsimply, michelleweber, ranh, kjellr, karmatosed.
Fixes #32417, #39993, #39994, #39995.
Built from https://develop.svn.wordpress.org/trunk@40640
git-svn-id: http://core.svn.wordpress.org/trunk@40501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-05-11 17:11:44 -04:00
|
|
|
*/
|
|
|
|
public function __construct() {
|
2017-11-30 18:11:00 -05:00
|
|
|
parent::__construct(
|
2018-08-16 21:51:36 -04:00
|
|
|
'media_audio',
|
|
|
|
__( 'Audio' ),
|
|
|
|
array(
|
2017-11-30 18:11:00 -05:00
|
|
|
'description' => __( 'Displays an audio player.' ),
|
|
|
|
'mime_type' => 'audio',
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
$this->l10n = array_merge(
|
2018-08-16 21:51:36 -04:00
|
|
|
$this->l10n,
|
|
|
|
array(
|
2017-11-30 18:11:00 -05:00
|
|
|
'no_media_selected' => __( 'No audio selected' ),
|
|
|
|
'add_media' => _x( 'Add Audio', 'label for button in the audio widget' ),
|
|
|
|
'replace_media' => _x( 'Replace Audio', 'label for button in the audio widget; should preferably not be longer than ~13 characters long' ),
|
|
|
|
'edit_media' => _x( 'Edit Audio', 'label for button in the audio widget; should preferably not be longer than ~13 characters long' ),
|
|
|
|
'missing_attachment' => sprintf(
|
2019-09-02 20:41:05 -04:00
|
|
|
/* translators: %s: URL to media library. */
|
2022-04-11 08:08:09 -04:00
|
|
|
__( 'That audio file cannot be found. Check your <a href="%s">media library</a> and make sure it was not deleted.' ),
|
2017-11-30 18:11:00 -05:00
|
|
|
esc_url( admin_url( 'upload.php' ) )
|
|
|
|
),
|
2019-09-02 20:41:05 -04:00
|
|
|
/* translators: %d: Widget count. */
|
2017-11-30 18:11:00 -05:00
|
|
|
'media_library_state_multi' => _n_noop( 'Audio Widget (%d)', 'Audio Widget (%d)' ),
|
|
|
|
'media_library_state_single' => __( 'Audio Widget' ),
|
Administration: Replace contracted verb forms for better consistency.
This changeset replaces contracted verb forms like `doesn't`, `can't`, or `isn't` with non-contracted forms like `does not`, `cannot`, or `is not`, for better consistency across the WordPress administration. It also updates some corresponding unit tests strings.
Props Presskopp, socalchristina, aandrewdixon, francina, SergeyBiryukov, JeffPaul, audrasjb, hellofromTonya.
Fixes #38913.
See #39176.
Built from https://develop.svn.wordpress.org/trunk@52978
git-svn-id: http://core.svn.wordpress.org/trunk@52567 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-03-22 12:25:03 -04:00
|
|
|
'unsupported_file_type' => __( 'Looks like this is not the correct kind of file. Please link to an audio file instead.' ),
|
2017-11-30 18:11:00 -05:00
|
|
|
)
|
|
|
|
);
|
Widgets: Introduce media widgets for images, audio, and video with extensible base for additional media widgets in the future.
The last time a new widget was introduced, Vuvuzelas were a thing, Angry Birds started taking over phones, and WordPress stopped shipping with Kubrick. Seven years and 17 releases without new widgets have been enough, time to spice up your sidebar!
Props westonruter, melchoyce, obenland, timmydcrawford, adamsilverstein, gonom9, wonderboymusic, Fab1en, DrewAPicture, sirbrillig, joen, matias, samikeijonen, afercia, celloexpressions, designsimply, michelleweber, ranh, kjellr, karmatosed.
Fixes #32417, #39993, #39994, #39995.
Built from https://develop.svn.wordpress.org/trunk@40640
git-svn-id: http://core.svn.wordpress.org/trunk@40501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-05-11 17:11:44 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get schema for properties of a widget instance (item).
|
|
|
|
*
|
2019-04-02 18:13:52 -04:00
|
|
|
* @since 4.8.0
|
Widgets: Introduce media widgets for images, audio, and video with extensible base for additional media widgets in the future.
The last time a new widget was introduced, Vuvuzelas were a thing, Angry Birds started taking over phones, and WordPress stopped shipping with Kubrick. Seven years and 17 releases without new widgets have been enough, time to spice up your sidebar!
Props westonruter, melchoyce, obenland, timmydcrawford, adamsilverstein, gonom9, wonderboymusic, Fab1en, DrewAPicture, sirbrillig, joen, matias, samikeijonen, afercia, celloexpressions, designsimply, michelleweber, ranh, kjellr, karmatosed.
Fixes #32417, #39993, #39994, #39995.
Built from https://develop.svn.wordpress.org/trunk@40640
git-svn-id: http://core.svn.wordpress.org/trunk@40501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-05-11 17:11:44 -04:00
|
|
|
*
|
|
|
|
* @see WP_REST_Controller::get_item_schema()
|
|
|
|
* @see WP_REST_Controller::get_additional_fields()
|
|
|
|
* @link https://core.trac.wordpress.org/ticket/35574
|
2020-01-09 19:30:05 -05:00
|
|
|
*
|
Widgets: Introduce media widgets for images, audio, and video with extensible base for additional media widgets in the future.
The last time a new widget was introduced, Vuvuzelas were a thing, Angry Birds started taking over phones, and WordPress stopped shipping with Kubrick. Seven years and 17 releases without new widgets have been enough, time to spice up your sidebar!
Props westonruter, melchoyce, obenland, timmydcrawford, adamsilverstein, gonom9, wonderboymusic, Fab1en, DrewAPicture, sirbrillig, joen, matias, samikeijonen, afercia, celloexpressions, designsimply, michelleweber, ranh, kjellr, karmatosed.
Fixes #32417, #39993, #39994, #39995.
Built from https://develop.svn.wordpress.org/trunk@40640
git-svn-id: http://core.svn.wordpress.org/trunk@40501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-05-11 17:11:44 -04:00
|
|
|
* @return array Schema for properties.
|
|
|
|
*/
|
|
|
|
public function get_instance_schema() {
|
2019-04-02 18:13:52 -04:00
|
|
|
$schema = array(
|
|
|
|
'preload' => array(
|
|
|
|
'type' => 'string',
|
|
|
|
'enum' => array( 'none', 'auto', 'metadata' ),
|
|
|
|
'default' => 'none',
|
|
|
|
'description' => __( 'Preload' ),
|
|
|
|
),
|
|
|
|
'loop' => array(
|
|
|
|
'type' => 'boolean',
|
|
|
|
'default' => false,
|
|
|
|
'description' => __( 'Loop' ),
|
|
|
|
),
|
Widgets: Introduce media widgets for images, audio, and video with extensible base for additional media widgets in the future.
The last time a new widget was introduced, Vuvuzelas were a thing, Angry Birds started taking over phones, and WordPress stopped shipping with Kubrick. Seven years and 17 releases without new widgets have been enough, time to spice up your sidebar!
Props westonruter, melchoyce, obenland, timmydcrawford, adamsilverstein, gonom9, wonderboymusic, Fab1en, DrewAPicture, sirbrillig, joen, matias, samikeijonen, afercia, celloexpressions, designsimply, michelleweber, ranh, kjellr, karmatosed.
Fixes #32417, #39993, #39994, #39995.
Built from https://develop.svn.wordpress.org/trunk@40640
git-svn-id: http://core.svn.wordpress.org/trunk@40501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-05-11 17:11:44 -04:00
|
|
|
);
|
|
|
|
|
|
|
|
foreach ( wp_get_audio_extensions() as $audio_extension ) {
|
|
|
|
$schema[ $audio_extension ] = array(
|
2017-11-30 18:11:00 -05:00
|
|
|
'type' => 'string',
|
|
|
|
'default' => '',
|
|
|
|
'format' => 'uri',
|
2019-09-02 20:41:05 -04:00
|
|
|
/* translators: %s: Audio extension. */
|
Widgets: Introduce media widgets for images, audio, and video with extensible base for additional media widgets in the future.
The last time a new widget was introduced, Vuvuzelas were a thing, Angry Birds started taking over phones, and WordPress stopped shipping with Kubrick. Seven years and 17 releases without new widgets have been enough, time to spice up your sidebar!
Props westonruter, melchoyce, obenland, timmydcrawford, adamsilverstein, gonom9, wonderboymusic, Fab1en, DrewAPicture, sirbrillig, joen, matias, samikeijonen, afercia, celloexpressions, designsimply, michelleweber, ranh, kjellr, karmatosed.
Fixes #32417, #39993, #39994, #39995.
Built from https://develop.svn.wordpress.org/trunk@40640
git-svn-id: http://core.svn.wordpress.org/trunk@40501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-05-11 17:11:44 -04:00
|
|
|
'description' => sprintf( __( 'URL to the %s audio source file' ), $audio_extension ),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2019-04-02 18:13:52 -04:00
|
|
|
return array_merge( $schema, parent::get_instance_schema() );
|
Widgets: Introduce media widgets for images, audio, and video with extensible base for additional media widgets in the future.
The last time a new widget was introduced, Vuvuzelas were a thing, Angry Birds started taking over phones, and WordPress stopped shipping with Kubrick. Seven years and 17 releases without new widgets have been enough, time to spice up your sidebar!
Props westonruter, melchoyce, obenland, timmydcrawford, adamsilverstein, gonom9, wonderboymusic, Fab1en, DrewAPicture, sirbrillig, joen, matias, samikeijonen, afercia, celloexpressions, designsimply, michelleweber, ranh, kjellr, karmatosed.
Fixes #32417, #39993, #39994, #39995.
Built from https://develop.svn.wordpress.org/trunk@40640
git-svn-id: http://core.svn.wordpress.org/trunk@40501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-05-11 17:11:44 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Render the media on the frontend.
|
|
|
|
*
|
2019-04-02 18:13:52 -04:00
|
|
|
* @since 4.8.0
|
Widgets: Introduce media widgets for images, audio, and video with extensible base for additional media widgets in the future.
The last time a new widget was introduced, Vuvuzelas were a thing, Angry Birds started taking over phones, and WordPress stopped shipping with Kubrick. Seven years and 17 releases without new widgets have been enough, time to spice up your sidebar!
Props westonruter, melchoyce, obenland, timmydcrawford, adamsilverstein, gonom9, wonderboymusic, Fab1en, DrewAPicture, sirbrillig, joen, matias, samikeijonen, afercia, celloexpressions, designsimply, michelleweber, ranh, kjellr, karmatosed.
Fixes #32417, #39993, #39994, #39995.
Built from https://develop.svn.wordpress.org/trunk@40640
git-svn-id: http://core.svn.wordpress.org/trunk@40501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-05-11 17:11:44 -04:00
|
|
|
*
|
|
|
|
* @param array $instance Widget instance props.
|
|
|
|
*/
|
|
|
|
public function render_media( $instance ) {
|
2017-11-30 18:11:00 -05:00
|
|
|
$instance = array_merge( wp_list_pluck( $this->get_instance_schema(), 'default' ), $instance );
|
Widgets: Introduce media widgets for images, audio, and video with extensible base for additional media widgets in the future.
The last time a new widget was introduced, Vuvuzelas were a thing, Angry Birds started taking over phones, and WordPress stopped shipping with Kubrick. Seven years and 17 releases without new widgets have been enough, time to spice up your sidebar!
Props westonruter, melchoyce, obenland, timmydcrawford, adamsilverstein, gonom9, wonderboymusic, Fab1en, DrewAPicture, sirbrillig, joen, matias, samikeijonen, afercia, celloexpressions, designsimply, michelleweber, ranh, kjellr, karmatosed.
Fixes #32417, #39993, #39994, #39995.
Built from https://develop.svn.wordpress.org/trunk@40640
git-svn-id: http://core.svn.wordpress.org/trunk@40501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-05-11 17:11:44 -04:00
|
|
|
$attachment = null;
|
|
|
|
|
|
|
|
if ( $this->is_attachment_with_mime_type( $instance['attachment_id'], $this->widget_options['mime_type'] ) ) {
|
|
|
|
$attachment = get_post( $instance['attachment_id'] );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( $attachment ) {
|
|
|
|
$src = wp_get_attachment_url( $attachment->ID );
|
|
|
|
} else {
|
|
|
|
$src = $instance['url'];
|
|
|
|
}
|
|
|
|
|
|
|
|
echo wp_audio_shortcode(
|
|
|
|
array_merge(
|
|
|
|
$instance,
|
|
|
|
compact( 'src' )
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Enqueue preview scripts.
|
|
|
|
*
|
|
|
|
* These scripts normally are enqueued just-in-time when an audio shortcode is used.
|
|
|
|
* In the customizer, however, widgets can be dynamically added and rendered via
|
|
|
|
* selective refresh, and so it is important to unconditionally enqueue them in
|
|
|
|
* case a widget does get added.
|
|
|
|
*
|
|
|
|
* @since 4.8.0
|
|
|
|
*/
|
|
|
|
public function enqueue_preview_scripts() {
|
|
|
|
/** This filter is documented in wp-includes/media.php */
|
|
|
|
if ( 'mediaelement' === apply_filters( 'wp_audio_shortcode_library', 'mediaelement' ) ) {
|
|
|
|
wp_enqueue_style( 'wp-mediaelement' );
|
|
|
|
wp_enqueue_script( 'wp-mediaelement' );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Loads the required media files for the media manager and scripts for media widgets.
|
|
|
|
*
|
|
|
|
* @since 4.8.0
|
|
|
|
*/
|
|
|
|
public function enqueue_admin_scripts() {
|
|
|
|
parent::enqueue_admin_scripts();
|
|
|
|
|
|
|
|
wp_enqueue_style( 'wp-mediaelement' );
|
|
|
|
wp_enqueue_script( 'wp-mediaelement' );
|
|
|
|
|
|
|
|
$handle = 'media-audio-widget';
|
|
|
|
wp_enqueue_script( $handle );
|
|
|
|
|
|
|
|
$exported_schema = array();
|
|
|
|
foreach ( $this->get_instance_schema() as $field => $field_schema ) {
|
|
|
|
$exported_schema[ $field ] = wp_array_slice_assoc( $field_schema, array( 'type', 'default', 'enum', 'minimum', 'format', 'media_prop', 'should_preview_update' ) );
|
|
|
|
}
|
|
|
|
wp_add_inline_script(
|
|
|
|
$handle,
|
|
|
|
sprintf(
|
|
|
|
'wp.mediaWidgets.modelConstructors[ %s ].prototype.schema = %s;',
|
|
|
|
wp_json_encode( $this->id_base ),
|
|
|
|
wp_json_encode( $exported_schema )
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
wp_add_inline_script(
|
|
|
|
$handle,
|
|
|
|
sprintf(
|
|
|
|
'
|
|
|
|
wp.mediaWidgets.controlConstructors[ %1$s ].prototype.mime_type = %2$s;
|
|
|
|
wp.mediaWidgets.controlConstructors[ %1$s ].prototype.l10n = _.extend( {}, wp.mediaWidgets.controlConstructors[ %1$s ].prototype.l10n, %3$s );
|
|
|
|
',
|
|
|
|
wp_json_encode( $this->id_base ),
|
|
|
|
wp_json_encode( $this->widget_options['mime_type'] ),
|
|
|
|
wp_json_encode( $this->l10n )
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Render form template scripts.
|
|
|
|
*
|
|
|
|
* @since 4.8.0
|
|
|
|
*/
|
|
|
|
public function render_control_template_scripts() {
|
|
|
|
parent::render_control_template_scripts()
|
|
|
|
?>
|
|
|
|
<script type="text/html" id="tmpl-wp-media-widget-audio-preview">
|
|
|
|
<# if ( data.error && 'missing_attachment' === data.error ) { #>
|
|
|
|
<div class="notice notice-error notice-alt notice-missing-attachment">
|
|
|
|
<p><?php echo $this->l10n['missing_attachment']; ?></p>
|
|
|
|
</div>
|
|
|
|
<# } else if ( data.error ) { #>
|
|
|
|
<div class="notice notice-error notice-alt">
|
|
|
|
<p><?php _e( 'Unable to preview media due to an unknown error.' ); ?></p>
|
|
|
|
</div>
|
|
|
|
<# } else if ( data.model && data.model.src ) { #>
|
2017-11-30 18:11:00 -05:00
|
|
|
<?php wp_underscore_audio_template(); ?>
|
Widgets: Introduce media widgets for images, audio, and video with extensible base for additional media widgets in the future.
The last time a new widget was introduced, Vuvuzelas were a thing, Angry Birds started taking over phones, and WordPress stopped shipping with Kubrick. Seven years and 17 releases without new widgets have been enough, time to spice up your sidebar!
Props westonruter, melchoyce, obenland, timmydcrawford, adamsilverstein, gonom9, wonderboymusic, Fab1en, DrewAPicture, sirbrillig, joen, matias, samikeijonen, afercia, celloexpressions, designsimply, michelleweber, ranh, kjellr, karmatosed.
Fixes #32417, #39993, #39994, #39995.
Built from https://develop.svn.wordpress.org/trunk@40640
git-svn-id: http://core.svn.wordpress.org/trunk@40501 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-05-11 17:11:44 -04:00
|
|
|
<# } #>
|
|
|
|
</script>
|
|
|
|
<?php
|
|
|
|
}
|
|
|
|
}
|