我想添加一个下载按钮到核心wp音频播放器(mediaelement.js)。
我怎么能这么简单?有什么建议吗?
发布于 2014-04-30 23:08:24
可以用自己的模板覆盖播放列表模板:
/**
* Remove the native playlist template and load our custom template
* @link http://wordpress.stackexchange.com/q/141767/26350
*/
add_action( 'wp_playlist_scripts', 'wpse_141767_wp_playlist_scripts' );
function wpse_141767_wp_playlist_scripts()
{
remove_action( 'wp_footer', 'wp_underscore_playlist_templates', 0 );
add_action( 'wp_footer', 'wpse_141767_wp_underscore_playlist_templates', 0 );
}其中,修改后的模板定义为:
/**
* Our custom playlist template.
*/
function wpse_141767_wp_underscore_playlist_templates() {
?>
<script type="text/html" id="tmpl-wp-playlist-current-item">
<# if ( data.image ) { #>
<img src="{{ data.thumb.src }}"/>
<# } #>
<div class="wp-playlist-caption">
<span class="wp-playlist-item-meta wp-playlist-item-title">“{{ data.title }}”</span>
<# if ( data.meta.album ) { #><span class="wp-playlist-item-meta wp-playlist-item-album">{{ data.meta.album }}</span><# } #>
<# if ( data.meta.artist ) { #><span class="wp-playlist-item-meta wp-playlist-item-artist">{{ data.meta.artist }}</span><# } #>
</div>
</script>
<script type="text/html" id="tmpl-wp-playlist-item">
<div class="wp-playlist-item">
<a class="wp-playlist-caption" href="{{ data.src }}">
{{ data.index ? ( data.index + '. ' ) : '' }}
<# if ( data.caption ) { #>
{{ data.caption }}
<# } else { #>
<span class="wp-playlist-item-title">“{{{ data.title }}}”</span>
<# if ( data.artists && data.meta.artist ) { #>
<span class="wp-playlist-item-artist"> — {{ data.meta.artist }}</span>
<# } #>
<# } #>
</a>
<# if ( data.meta.length_formatted ) { #>
<div class="wp-playlist-item-length">{{ data.meta.length_formatted }}</div>
<# } #>
</div>
<!-- BEGIN CHANGES -->
<a href="{{ data.src }}" class="wpse-download" download="">download</a>
<!-- END CHANGES -->
</script>
<?php
}我们在结尾添加了这个部分:
<!-- BEGIN CHANGES -->
(<a href="{{ data.src }}" class="wpse-download" download="">download</a>)
<!-- END CHANGES -->您还可能需要添加一个特殊的url来下载这些文件。
我之所以没有在div.wp-playlist-item选择器中添加它,是因为它里面点击的所有东西都会启动播放器。原因是/wp-includes/js/mediaelement/wp-playlist.js文件的这一部分:
events : {
'click .wp-playlist-item' : 'clickTrack',
'click .wp-playlist-next' : 'next',
'click .wp-playlist-prev' : 'prev'
},
clickTrack : function (e) {
e.preventDefault();
this.index = this.$( '.wp-playlist-item' ).index( e.currentTarget );
this.setCurrent();
},下面是我们修改过的播放列表模板的屏幕截图:

您可以尝试一些自定义的CSS来修改它以满足您的需要。
这里有一种黑客,可能需要根据当前主题进行调整:
<style>
.wpse-download {
margin-top: -22px;
margin-left: -16px;
position: absolute;
}
.wp-playlist {
padding: 25px;
}
</style>通过以下方式:
<!-- BEGIN CHANGES -->
<a href="{{ data.src }}" class="wpse-download" download="">
<i class="fa fa-download" aria-hidden="true"></i>
</a>
<!-- END CHANGES -->当着字体的面。

您还可以考虑在您自己版本的wp-playlist.js文件中排队,以替换:
'click .wp-playlist-item' : 'clickTrack',例如:
'click a.wp-playlist-item-caption' : 'clickTrack',可以将下载链接与歌曲标题放在同一行。
更新了截图并添加了另一个例子。
为了确保文件是下载的,而不是显示在浏览器中,我们可以使用download链接属性。我更新了上面的内容:
(<a href="{{ data.src }}" download="">download</a>)空值似乎会以当前文件名的形式下载。
发布于 2017-11-10 17:35:49
<script>
/**
* Our custom playlist template for mp3 download`.
*/
function wpse_141767_wp_underscore_playlist_templates() {
?>
<script type="text/html" id="tmpl-wp-playlist-current-item">
<# if ( data.image ) { #>
<img src="{{ data.thumb.src }}"/>
<# } #>
<div class="wp-playlist-caption">
<span class="wp-playlist-item-meta wp-playlist-item-title">“{{ data.title }}”</span>
<# if ( data.meta.album ) { #><span class="wp-playlist-item-meta wp-playlist-item-album">{{ data.meta.album }}</span><# } #>
<# if ( data.meta.artist ) { #><span class="wp-playlist-item-meta wp-playlist-item-artist">{{ data.meta.artist }}</span><# } #>
</div>
</script>
<script type="text/html" id="tmpl-wp-playlist-item">
<div class="wp-playlist-item">
<a class="wp-playlist-caption" href="{{ data.src }}">
{{ data.index ? ( data.index + '. ' ) : '' }}
<# if ( data.caption ) { #>
{{ data.caption }}
<# } else { #>
<span class="wp-playlist-item-title">“{{{ data.title }}}”</span>
<# if ( data.artists && data.meta.artist ) { #>
<span class="wp-playlist-item-artist"> — {{ data.meta.artist }}</span>
<# } #>
<# } #>
</a>
<# if ( data.meta.length_formatted ) { #>
<div class="wp-playlist-item-length">
<span>
(<a href="{{ data.src }}"><i class="fa fa-download" title="Download" aria-hidden="true"></i></a>)
</span>{{ data.meta.length_formatted }}</div>
<# } #>
</div>
</script>
<?php
}
</script>https://wordpress.stackexchange.com/questions/141767
复制相似问题