it-swarm.com.de

Nur Videos und Bilder in the_content () innerhalb der Schleife anzeigen

Das Problem, das ich zu lösen versuche, befindet sich in der WordPress-Schleife. Ich möchte nur, dass Video-Einbettungen oder Bilder angezeigt werden, kein Text.

Derzeit sehen die meisten meiner Posts beim Erstellen eines neuen Posts (Standardformat) im WordPress-Editor folgendermaßen aus:

http://youtube.com/somevideo

Some supporting text below the video

Und natürlich erstellt WordPress dann ein automatisch eingebettetes Video mit dem YouTube- oder Vimeo-Link, den ich dort eingefügt habe.

Beim Anzeigen der Liste der Beiträge möchte ich nicht, dass Some supporting text below the video angezeigt wird, sondern nur das Video.

Momentan ist meine content.php Seite ziemlich einfach und zeigt nur den Inhalt mit <?php the_content(); ?> an.

Gibt es eine Möglichkeit, diesen Text für jeden Beitrag zu entfernen?

1
jamez14

Wir können das mit Hilfe der Funktion get_media_embedded_in_content() machen:

/**
 * Display only the first media item in the content
 *
 * @link http://wordpress.stackexchange.com/a/199398/26350
 */
! is_admin() && add_filter( 'the_content', function( $content )
{
    // Get the avialable media items from the content
    add_filter( 'media_embedded_in_content_allowed_types', 'wpse_media_types' );
    $media = get_media_embedded_in_content( $content );
    remove_filter( 'media_embedded_in_content_allowed_types', 'wpse_media_types' );

    // Only use the first media item if available 
    if( $media ) 
        $content = array_shift( $media );   

    return $content;
} , 99 );

wo wir unseren benutzerdefinierten media types definieren können mit:

function wpse_media_types( $types )
{
   return [ 'audio', 'video', 'object', 'embed', 'iframe', 'img' ];
}

Hier ist ein weiterer Ansatz, bei dem wir alle URLs aus dem Inhalt extrahieren und prüfen, ob ein oEmbed verfügbar ist:

/**
 * Display only the first oEmbed in the content
 *
 * @link http://wordpress.stackexchange.com/a/199398/26350
 */
! is_admin() && add_filter( 'the_content', function( $content )
{
    require_once( ABSPATH . WPINC . '/class-oembed.php' );
    $wp_oembed = _wp_oembed_get_object();
    $urls = wp_extract_urls( $content );
    foreach( (array) $urls as $url )
    {
        if( $wp_oembed->get_provider( $url ) )
            $content = $url;
    }
    return $content;
}, 1 );

Beachten Sie, dass Sie möglicherweise eine weitere Einschränkung hinzufügen möchten, wo Sie dies verwenden möchten.

1
birgire