根据附件页面上的文件数量确定音频或播放列表快捷码条件

时间:2015-01-30 作者:Chozen

我这样做的原因是为了音乐&;娱乐网站,用户可以通过嵌入代码在其他网站上共享音乐和视频。我在用音频。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技能非常有限,所以如果有更好的方法来完成这一切,那就太好了。

谢谢

2 个回复
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 . \'"]\');  
        } 

    ?> 
希望这对某些人有帮助,我重复了一些我在单个音频中需要的东西,但不是播放列表,这是我最需要的条件语句,以某种方式设计每个播放器。

结束