it-swarm.com.de

So generieren Sie aus einem Video, das in eine Metabox eingebettet ist, ein empfohlenes Bild

Ich habe eine Metabox, mit der ich Videos von Youtube und Vimeo zu Posts im Video-Post-Format hinzufügen kann. Ich suche jetzt nach automatisch generierten Thumbnails für diesen Beitrag mit Videopost-Format. Dies ist mein Meatabox-Code, mit dem ich die Videos einbetten kann:

function my_theme_show_post_video_metabox( $post ) {

  wp_nonce_field( 'my_theme_post_video_metabox', '_my_theme_post_video_metabox' );
  $video = get_post_meta( $post->ID, '_my_theme_post_video', true );

  echo '<h4 style="margin: 10px 0 0 0;">URL - YouTube or Vimeo</h4>';
  echo '<input type="text" id="_my_theme_post_video" name="_my_theme_post_video" value="' . $video . '" style="width: 100%;" />';

}

Wie kann ich nun aus dem in diese Metabox eingebetteten Video ein Miniaturbild erstellen, um es als Bild nach der Veröffentlichung zu verwenden?

2
Madeirense

Es gibt ein paar Schritte, die Sie abdecken müssen.

  1. ID aus MetaBox-Einbettung abrufen
  2. Liste der verfügbaren Größen anhand der ID abrufen
  3. Importieren Sie das Bild in Ihre Bibliothek, falls es noch nicht existiert
  4. Neue Datei zum Posten anhängen.

SCHRITT 2 | YouTube

Erstellen Sie eine Reihe von Größen aus YouTube, die Sie später verwenden können:

function getYoutTubeImagesFromID($yt_id, $prefix = 'https:') {

    $yt_url = 'img.youtube.com'; //  can be 'i3.ytimg.com'

    $sizes = array(0, 1, 2, 3, "default", "hqdefault", "mqdefault", "sddefault", "maxresdefault");
    $result = array();
    foreach($sizes as $size) {
        $result [ $size ] = "{$prefix}//img.youtube.com/vi/{$yt_id}/{$size}.jpg";
    }

    return array(
        'id'    => $yt_id,
        'link'  => "{$prefix}//youtu.be/{$yt_id}",
        'sizes' => $result,
    );
}

Um dies zu testen, durchlaufen Sie eine Liste von IDS.

$yt_videos = array('cV5yxrZpuXg', 'LtBTHqi8Gmw', 'VEAY-nRlP5c', 'IWeasYydL8Y', 'fCVXpcR9KDY');

foreach($yt_videos as $yt_id) {

    $ytImages = getYoutTubeImagesFromID($yt_id);

    $src = $ytImages[ 'sizes' ][ 'hqdefault' ];
    $link = $ytImages[ 'link' ];

    echo "<a href=\"{$link}\" target=\"_blank\" ><img src=\"{$src}\" ></a>";

    print_r($ytImages);
}

Sie sollten jeweils Größeninformationen enthalten, die Sie für Ihren Import verwenden können.

Array
(
    [id] => cV5yxrZpuXg
    [link] => https://youtu.be/cV5yxrZpuXg
    [sizes] => Array
        (
            [0] => https://img.youtube.com/vi/cV5yxrZpuXg/0.jpg
            [1] => https://img.youtube.com/vi/cV5yxrZpuXg/1.jpg
            [2] => https://img.youtube.com/vi/cV5yxrZpuXg/2.jpg
            [3] => https://img.youtube.com/vi/cV5yxrZpuXg/3.jpg
            [default] => https://img.youtube.com/vi/cV5yxrZpuXg/default.jpg
            [hqdefault] => https://img.youtube.com/vi/cV5yxrZpuXg/hqdefault.jpg
            [mqdefault] => https://img.youtube.com/vi/cV5yxrZpuXg/mqdefault.jpg
            [sddefault] => https://img.youtube.com/vi/cV5yxrZpuXg/sddefault.jpg
            [maxresdefault] => https://img.youtube.com/vi/cV5yxrZpuXg/maxresdefault.jpg
        )

)

SCHRITT 2 | Vimeo

Sammeln Sie Vimeo-Videoinformationen

function getVimeoImagesFromID($vimeo_id, $prefix = 'https:') {

    $vimeo_url = "{$prefix}//vimeo.com/api/v2/video/{$vimeo_id}.php";

    if( ! $vimeo_hash = @file_get_contents($vimeo_url)) {
        return false;
    }

    $result = unserialize($vimeo_hash);

    return ( count($result) === 1 ) ? array_shift($result) : $result;
}

// your vimeo id 
$vimeo_id = 71472926;

// get available information for video
if($vimeo_hash = getVimeoImagesFromID($vimeo_id)) {

    // grab the largest image possible
    $vimeo_src = $vimeo_hash [ 'thumbnail_large' ];

    echo $vimeo_src; // https://i.vimeocdn.com/video/445043557_640.jpg
}

SCHRITT 3 | Sideload Image

media_sideload_image das Bild von YT auf Ihren Server. Stellen Sie sicher, dass Sie den thumbnail_id aus der resultierenden src entnehmen.

// your youtube id
$yt_id = 'cSXlOeKusWs';

// size information for id
$ytImages = getYoutTubeImagesFromID($yt_id);

// max res image
$url = $ytImages[ 'sizes' ][ 'maxresdefault' ];

// sideload image
$src = media_sideload_image(esc_url($url), NULL, '', 'src');

// convert src to id
$thumbnail_id = attachment_url_to_postid($src);

SCHRITT 4 | Post-Thumbnail anhängen

set_post_thumbnail basierend auf dem neuen thumbnail_id.

set_post_thumbnail( $post, $thumbnail_id );
2
jgraup