我这样做的原因是为了音乐&;娱乐网站,用户可以通过嵌入代码在其他网站上共享音乐和视频。我在用音频。php和视频。加载默认MediaElement的php附件页。js HTML5播放器及其父帖子中的所有附加媒体。然后,我通过Iframe链接到该附件页面,从而为每个音频和视频帖子生成一个嵌入代码。
我相信插件会是更好的解决方案,但这是我目前的技能水平所能做到的。
这就是我到目前为止所得到的。
对于播放列表:
<?php
global $post;
$args = array(
\'post_parent\' => $post->post_parent,
\'numberposts\' => -1,
\'post_status\' => \'null\',
\'post_type\' => \'attachment\',
\'post_mime_type\' => array(\'audio\'),
\'order\' => \'ASC\' );
$attachments = get_posts($args);
$medias = $attachments;
if (count($medias) > 0) {
$array = array();
foreach($medias as $media) {
$array[] = $media->ID;
}
$id_comma_separated = implode(\',\', $array);
echo do_shortcode(\'[playlist ids="\' . $id_comma_separated . \'"]\');
}
?>
对于单个音频。
<?php
global $post;
$args = array(
\'post_parent\' => $post->post_parent,
\'numberposts\' => 1,
\'post_status\' => \'null\',
\'post_type\' => \'attachment\',
\'post_mime_type\' => array(\'audio\'),
\'order\' => \'ASC\' );
$attachments = get_posts($args);
$medias = $attachments;
$medias = wp_get_attachment_url( $attachment_id, \'full\' );
echo do_shortcode(\'[audio src="\' . $medias . \'"]\');
?>
现在很明显,无论怎样,这总是返回两个播放器,我需要将其作为一个查询,如果只有一个音频可用,则执行[音频]快捷码,如果父帖子中有多个音频附件,则执行[播放列表]。
就我所知,这打破了音频附件页面后我尝试的一切。
我是一名设计师而不是开发人员,所以我的PHP技能非常有限,所以如果有更好的方法来完成这一切,那就太好了。
谢谢
SO网友:birgire
关于附件文件的一些想法:
简化:
$tmp = $post; // Store the current global post object
$post = get_post( $post->post_parent ); // Use the post parent post object
$media = get_attached_media( \'audio\' );
if( $media )
{
$sc = "[audio]";
if( count( $media ) > 1 )
{
$ids = join( \',\', wp_list_pluck( $media, \'ID\' ) );
$sc = "[playlist ids=\\"{$ids}\\"]";
}
echo do_shortcode( $sc );
}
$post = $tmp; // restore the right global $post object
我们在哪里使用
[audio]
快捷码,播放当前帖子的附加音频文件。
我们可以进一步简化:
$tmp = $post;
$post = get_post( $post->post_parent );
if( $media = get_attached_media( \'audio\' ) )
{
$sc = "[audio]";
if( count( $media ) > 1 )
$sc = \'[playlist]\';
echo do_shortcode( $sc );
}
$post = $tmp;
如果剥离
[playlist]
快捷码,播放当前帖子的附加音频文件。
更短的版本:
$tmp = $post;
$post = get_post( $post->post_parent );
if( $media = get_attached_media( \'audio\' ) )
echo count( $media ) > 1 ? wp_playlist_shortcode() : wp_audio_shortcode();
$post = $tmp;
我们直接使用音频和播放列表的快捷码回调。
。。。最后:
$tmp = $post;
$post = get_post( $post->post_parent );
echo count( get_attached_media( \'audio\' ) ) > 1 ? wp_playlist_shortcode() : wp_audio_shortcode();
$post = $tmp;
请注意,我们假设我们在循环中
通过过滤器修改附件页面:
如果要将音频/播放列表播放器附加到附件内容,可以尝试以下操作,例如:
/**
* Append the audio/playlist from the parent post, to the attachment\'s content.
*
* @see http://wordpress.stackexchange.com/a/176600/26350
*/
add_filter( \'the_content\', function( $content )
{
if( is_attachment() )
{
global $post;
$tmp = $post;
$post = get_post( $post->post_parent );
$content .= count( get_attached_media( \'audio\' ) ) > 1 ? wp_playlist_shortcode() : wp_audio_shortcode();
$post = $tmp;
}
return $content;
});
SO网友:Chozen
好吧,我想出来了,我相信他们的做法要优雅得多,但它适合我需要做的事情。
<?php
// Single Audio & Playlist player
global $post;
$args = array(
\'post_parent\' => $post->post_parent,
\'numberposts\' => -1,
\'post_status\' => \'null\',
\'post_type\' => \'attachment\',
\'post_mime_type\' => array(\'audio\', \'video\'),
\'order\' => \'ASC\' );
$medias = get_posts($args);
// If the available audio attachments are less than or equal to 1
if (count($medias) <= 1) {
$medias = wp_get_attachment_url( $attachment_id, \'full\' );
echo do_shortcode(\'[audio src="\' . $medias . \'"]\');
// Get the artwork for single audio
$attachment_id = $attachment->ID;
$attachment_page = get_attachment_link( $attachment_id );
echo wp_get_attachment_image( $attachment_id );
// The parent post link and title
$parentTitle = get_the_title($post->post_parent);
echo \'<div class="parent-post-name">\' . $parentTitle . \'</div>\';
echo \'<a class="parent-post-link" href=" \' . get_permalink($post->post_parent) . \' "> \' . $parentTitle . \' </a>\';
}
// If the available audio attachments are more than or equal to 2
elseif (count($medias) >= 2) {
$array = array();
foreach($medias as $media) {
$array[] = $media->ID;
}
$id_comma_separated = implode(\',\', $array);
echo do_shortcode(\'[playlist ids="\' . $id_comma_separated . \'"]\');
}
?>
希望这对某些人有帮助,我重复了一些我在单个音频中需要的东西,但不是播放列表,这是我最需要的条件语句,以某种方式设计每个播放器。