it-swarm.com.de

Hinzufügen eines Attributs zur Ausgabe mit wp_video_shortcode add_filter

Ich versuche, der Video-Tag-Ausgabe mit dem Inhalt eines Posts mithilfe des integrierten WP-Video-Shortcodes eine Option zum Stummschalten hinzuzufügen. Ich habe diese Antwort gefunden. Wie kann ich den Shortcode [video] abrufen, um Parameter für Abfragezeichenfolgen zuzulassen? was hat mich zum add_filter geführt, aber ich habe wirklich Probleme, wie ich es verwenden soll? Ich dachte, der folgende Code könnte funktionieren:

function my_video_shortcode( $output, $atts, $video, $post_id, $library  ) {
    /**
     * @param string $output  Video shortcode HTML output.
     * @param array  $atts    Array of video shortcode attributes.
     * @param string $video   Video file.
     * @param int    $post_id Post ID.
     * @param string $library Media library used for the video shortcode.
     */

     $html_atts = array(
        'class'    => apply_filters( 'wp_video_shortcode_class', 'wp-video-shortcode' ),
        'id'       => sprintf( 'video-%d-%d', $post_id, $instance ),
        'width'    => absint( $atts['width'] ),
        'height'   => absint( $atts['height'] ),
        'poster'   => esc_url( $atts['poster'] ),
        'loop'     => wp_validate_boolean( $atts['loop'] ),
        'autoplay' => wp_validate_boolean( $atts['autoplay'] ),
        'preload'  => $atts['preload'],
        'muted'    => 'muted',
    );
    $attr_strings = array();

    foreach ( $html_atts as $k => $v ) {
            $attr_strings[] = $k . '="' . esc_attr( $v ) . '"';
    }

    $html = '';
    if ( 'mediaelement' === $library && 1 === $instance ) {
            $html .= "<!--[if lt IE 9]><script>document.createElement('video');</script><![endif]-->\n";
    }
    $html .= sprintf( '<video %s controls="controls">', join( ' ', $attr_strings ) );

    $fileurl = '';
    $source = '<source type="%s" src="%s" />';
    foreach ( $default_types as $fallback ) {
        if ( ! empty( $atts[ $fallback ] ) ) {
            if ( empty( $fileurl ) ) {
                    $fileurl = $atts[ $fallback ];
            }
            if ( 'src' === $fallback && $is_youtube ) {
                    $type = array( 'type' => 'video/youtube' );
            } elseif ( 'src' === $fallback && $is_vimeo ) {
                    $type = array( 'type' => 'video/vimeo' );
            } else {
                    $type = wp_check_filetype( $atts[ $fallback ], wp_get_mime_types() );
            }
            $url = add_query_arg( '_', $instance, $atts[ $fallback ] );
            $html .= sprintf( $source, $type['type'], esc_url( $url ) );
        }
    }

    if ( ! empty( $content ) ) {
            if ( false !== strpos( $content, "\n" ) ) {
                    $content = str_replace( array( "\r\n", "\n", "\t" ), '', $content );
            }
            $html .= trim( $content );
    }

    if ( 'mediaelement' === $library ) {
            $html .= wp_mediaelement_fallback( $fileurl );
    }
    $html .= '</video>';

    $width_rule = '';
    if ( ! empty( $atts['width'] ) ) {
            $width_rule = sprintf( 'width: %dpx; ', $atts['width'] );
    }
    $output = sprintf( '<div style="%s" class="wp-video">%s</div>', $width_rule, $html );

    return $output;

}
add_filter('wp_video_shortcode', 'my_video_shortcode', 10, 2);

Ich erhalte die Variable Undefined: Für $ video, $ post_id und $ library sind die Videos auf der Seite leer. Es ist, weil sie keine Videoquelle haben, aber stummgeschaltet ist, obwohl ich nicht richtig erkenne.

Hier ist eine der Ausgaben auf der Seite:

<div style="width: 1306px; " class="wp-video">
<video class="wp-video-shortcode" id="video-0-0" width="1306" height="882" poster="" loop="" autoplay="" preload="metadata" muted="muted" controls="controls"></video>

Ich könnte meinen eigenen Shortcode für Videos schreiben, aber es ist schon fast da und eingebaut, also scheint es unnötig, dies zu tun.

Ich würde gerne ein Kontrollkästchen zu den Medienbibliotheksoptionen hinzufügen, aber ein Nizza zu haben.

Jede Hilfe sehr geschätzt.

2
user2078890

Ich erhalte die Variable Undefined: Für $ video, $ post_id und $ library sind die Videos auf der Seite leer.

Ersetzen:

add_filter( 'wp_video_shortcode', 'my_video_shortcode', 10, 2 );

mit:

add_filter( 'wp_video_shortcode', 'my_video_shortcode', 10, 5 );

um auf alle fünf Eingabeargumente im Rückruf Ihres Filters zuzugreifen.

ps: my_ ist so ein verbreitetes Präfix, dass ich etwas Einzigartigeres in Betracht ziehen würde.

pps: Hier ist ein anderer Ansatz, bei dem der Shortcode überschrieben wird:

add_shortcode( 'video', function ( $atts, $content ) 
{
    $output = wp_video_shortcode( $atts, $content );

    if( ! isset( $atts['muted'] ) || ! wp_validate_boolean( $atts['muted'] ) ) 
        return $output;

    if( false !== stripos( $output, ' muted="1"' ) )
        return $output;

    return str_ireplace( '<video ', '<video muted="1" ', $output ); 
} );

wobei das Attribut muted aktiviert ist mit:

[video muted="1" ... ]

Hoffe, Sie können es an Ihre Bedürfnisse anpassen!

2
birgire

Mit diesem Code werden alle Videos automatisch stummgeschaltet - einfach und übersichtlich:

add_filter( 'wp_video_shortcode', function( $output ) {
    $output = str_replace( '<video', '<video muted', $output );
    return $output;
} );

Und normalerweise möchten Sie dies nur für das automatische Abspielen von Videos, damit Sie nur solche Videos ansprechen können, die wie folgt aussehen:

add_filter( 'wp_video_shortcode', function( $output ) {
    if ( false !== strpos( $output, 'autoplay="1"' ) ) {
        $output = str_replace( '<video', '<video muted', $output );
    }
    return $output;
} );
0
WPExplorer