私がこれをする理由は、ユーザーが埋め込みコードを介して他のウェブサイトで音楽やビデオを共有することができる音楽&エンターテイメントサイトのためです。私はaudio.phpとvideo.phpの添付ページを使用して、デフォルトのMediaElement.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 . '"]');
?>
これは明らかにこれは常に2人のプレーヤーを返します、私はこれを1つのオーディオのみが利用可能な場合は[audio]ショートコードを、親の投稿に複数のオーディオ添付ファイルがある場合は[playlist]を実行する単一クエリー。
これは私が得た限りでは、これ以降に試したすべてがオーディオ添付ファイルのページを壊した。
私は開発者ではないデザイナーなので、私のPHPスキルは非常に限られています。そのため、これをすべて行うためのより良い方法があれば、それは素晴らしいことです。
ありがとう。
添付ファイルのいくつかのアイデア:
$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;
});
わかりました、私はそれを考え出しました、私は彼らがこれをすることのはるかにエレガントな方法であると確信しています、しかしそれは私がする必要があることのために働きます。
<?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 . '"]');
}
?>
これが誰かに役立つことを願っています、私は私が私がそれぞれのプレーヤーを特定の方法でスタイルするために最も必要とした条件ステートメントであるプレイリストではなく、私が必要としたいくつかの事柄をエコーしました。