Встановлення обраного зображення в публікації із вбудованого відео YouTube


15

Якщо я створю повідомлення, в якому є вбудоване відео YouTube (тому все, що я роблю, це вставити URL-адресу YouTube у допис і дозволити Wordpress автоматично вставити його для мене), чи є спосіб, щоб мініатюрна картинка відео була встановлена ​​як Популярне зображення публікації?

Відповіді:


17

Не рідно. Вам потрібно буде написати якийсь код, щоб це сталося - є приємна функція pastebin, яка забезпечує необхідний код для цього.

Редагувати (19.12.2011):

Так ось, як це можна зробити програмно. Додайте до файлу function.php наступні дві функції, і вам слід добре зайти. Код був прокоментований, щоб пояснити, що відбувається, але ось високий рівень того, що очікувати:

Ти повинен...

  • Створіть допис
  • До змісту включіть URL-адресу YouTube

Код буде ...

  • Розбираємо URL-адреси поза вмістом
  • Схопить першу URL-адресу, яку він знайде, і припустимо, що це URL-адреса YouTube
  • Візьміть мініатюру з віддаленого сервера та завантажте її
  • Встановіть його як ескіз поточної публікації

Зауважте, що якщо ви додасте кілька URL-адрес у свою публікацію, вам потрібно буде змінити код, щоб правильно знайти URL-адресу YouTube. Це можна зробити, повторивши $attachmentsколекцію та обнюхаючи, як виглядає URL-адреса YouTube.

function set_youtube_as_featured_image($post_id) {  

    // only want to do this if the post has no thumbnail
    if(!has_post_thumbnail($post_id)) { 

        // find the youtube url
        $post_array = get_post($post_id, ARRAY_A);
        $content = $post_array['post_content'];
        $youtube_id = get_youtube_id($content);

        // build the thumbnail string
        $youtube_thumb_url = 'http://img.youtube.com/vi/' . $youtube_id . '/0.jpg';

        // next, download the URL of the youtube image
        media_sideload_image($youtube_thumb_url, $post_id, 'Sample youtube image.');

        // find the most recent attachment for the given post
        $attachments = get_posts(
            array(
                'post_type' => 'attachment',
                'numberposts' => 1,
                'order' => 'ASC',
                'post_parent' => $post_id
            )
        );
        $attachment = $attachments[0];

        // and set it as the post thumbnail
        set_post_thumbnail( $post_id, $attachment->ID );

    } // end if

} // set_youtube_as_featured_image
add_action('save_post', 'set_youtube_as_featured_image');

function get_youtube_id($content) {

    // find the youtube-based URL in the post
    $urls = array();
    preg_match_all('#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#', $content, $urls);
    $youtube_url = $urls[0][0];

    // next, locate the youtube video id
    $youtube_id = '';
    if(strlen(trim($youtube_url)) > 0) {
        parse_str( parse_url( $youtube_url, PHP_URL_QUERY ) );
        $youtube_id = $v;
    } // end if

    return $youtube_id; 

} // end get_youtube_id

Слід зазначити, що це передбачає, що у вашій публікації немає ескізів публікації та не буде зніматись після встановлення ескізу повідомлення.

По-друге, якщо ви видалите мініатюру публікації і потім приєднаєте зображення до цієї публікації за допомогою медіа-завантажувача, буде використано останнє зображення.


Чудовий фрагмент, але оскільки хто знає, чи буде він рік відтепер - будь ласка, спробуйте включити принаймні резюме (якщо повний код занадто багато) того, що він робить у своїй відповіді (наприклад, "використовуйте це, щоб отримати мініатюру, тоді це завантажте та вкладіть ").
Рарст

1
Зауважте, що jetpack містить метод, названий get_youtube_idтак, що 500 серверів помиляться у вашій програмі, якщо ви використовуєте jetpack з вищевказаним кодом. Якщо ви перейменовуєте цю функцію, вона працюватиме добре
Майк Вормвальд,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.