it-swarm.com.de

Audio- oder Wiedergabelisten-Shortcode-Bedingung entsprechend der Anzahl der Dateien auf der Anhangsseite

Mein Grund dafür ist eine Musik- und Unterhaltungsseite, auf der Benutzer Musik und Videos über Einbettungscode auf anderen Websites teilen können. Ich verwende die Anhangsseiten audio.php und video.php, um den Standard-HTML5-Player MediaElement.js mit allen angehängten Medien aus dem übergeordneten Beitrag zu laden. Ich verlinke dann über Iframe zu dieser Anhangsseite, was zu einem Einbettungscode für jeden Audio- und Videopost führt.

Ich bin sicher, ein Plugin wäre eine viel bessere Lösung, aber das kann ich mit meinem aktuellen Kenntnisstand machen.

Dies ist, was ich bisher bekommen habe.

Für die Wiedergabeliste:

<?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 . '"]');
    }
?>

Und für Single-Audio.

<?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 . '"]');
?>

Das gibt natürlich immer zwei Spieler zurück, egal was passiert. Ich muss dies zu einer einzelnen Abfrage machen, die entweder den [Audio] Shortcode ausführt, wenn nur ein einzelnes Audio verfügbar ist, und [Wiedergabeliste], wenn mehr als ein Audio-Anhang im übergeordneten Beitrag vorhanden ist .

Soweit ich weiß, hat alles, was ich danach versucht habe, die Seite mit den Audioanhängen zerstört.

Ich bin ein Designer und kein Entwickler, daher sind meine PHP - Fähigkeiten sehr begrenzt. Wenn es also einen besseren Weg gibt, diese ganze Sache zu machen, wäre das großartig.

Vielen Dank.

3
Chozen

Einige Ideen für Ihre Anhangsdatei:

Eine Vereinfachung:

$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

wo wir den entfernten [audio]-Shortcode verwenden, wird die angehängte Audiodatei des aktuellen Posts abgespielt.

Wir können es weiter vereinfachen:

$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; 

dort, wo der entfernte [playlist] shortcode ist, werden die angehängten Audiodateien des aktuellen Beitrags abgespielt.

Noch kürzere Version:

$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; 

wo wir die Audio und Playlist Shortcode-Rückrufe direkt verwenden.

... und schlussendlich:

$tmp  = $post;  
$post = get_post( $post->post_parent ); 
echo count( get_attached_media( 'audio' ) ) > 1 ? wp_playlist_shortcode() : wp_audio_shortcode();
$post = $tmp; 

Beachten Sie, dass wir davon ausgehen, dass wir uns in der Schleife befinden.

Ändern Sie die Seite des Anhangs über einen Filter:

Wenn Sie den Audio-/Wiedergabelisten-Player an den Inhalt des Anhangs anhängen möchten, können Sie beispielsweise Folgendes versuchen:

/**
 * 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;
});            
2
birgire

OK, also habe ich es herausgefunden, ich bin sicher, dass es viel elegantere Wege sind, dies zu tun, aber es funktioniert für das, was ich tun musste.

    <?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 . '"]');  
        } 

    ?> 

Hoffentlich ist dies für jemanden hilfreich. Ich habe ein paar Dinge wiederholt, die ich für das einzelne Audio brauchte, aber nicht die Wiedergabeliste, die die bedingte Aussage ist, die ich am meisten brauchte, um jeden Spieler auf eine bestimmte Art und Weise zu stylen.

0
Chozen