
WordPressのブロックエディタには「YouTube埋め込み」ブロックがあります。投稿や固定ページにYouTubeを貼り付けるのにとても便利ですので活用している方も多いのではないでしょうか?
ここでは投稿のアイキャッチにYouTubeのサムネイル画像を自動的に取得する方法を紹介します。
目次
function.phpに記述
function set_youtube_thumbnail_as_featured_image($post_id) {
// ここで必須ファイルを読み込む
require_once ABSPATH . 'wp-admin/includes/image.php';
require_once ABSPATH . 'wp-admin/includes/file.php';
require_once ABSPATH . 'wp-admin/includes/media.php';
// リビジョンや自動保存は無視
if ( wp_is_post_revision($post_id) || get_post_status($post_id) != 'publish' ) {
return;
}
// 既にアイキャッチがある場合は処理しない
if ( has_post_thumbnail($post_id) ) {
return;
}
// 投稿の本文を取得
$post = get_post($post_id);
$content = $post->post_content;
// YouTubeのURLを正規表現で抽出
$pattern = '/https?:\/\/(?:www\.)?(?:youtube\.com\/watch\?v=|youtu\.be\/)([a-zA-Z0-9_-]+)/i';
if ( preg_match($pattern, $content, $matches) ) {
$video_id = $matches[1];
// 高解像度→中解像度の順で取得を試みる
$thumbnail_urls = array(
"https://img.youtube.com/vi/{$video_id}/maxresdefault.jpg",
"https://img.youtube.com/vi/{$video_id}/hqdefault.jpg",
);
foreach ($thumbnail_urls as $thumbnail_url) {
// ファイルを一時保存
$tmp = download_url($thumbnail_url);
// 成功したら処理
if ( !is_wp_error($tmp) ) {
$file_array = array(
'name' => $video_id . '.jpg',
'tmp_name' => $tmp,
);
// メディアとして登録
$attachment_id = media_handle_sideload($file_array, $post_id, 'YouTubeサムネイル');
// 正しく登録できたらアイキャッチに設定
if ( !is_wp_error($attachment_id) ) {
set_post_thumbnail($post_id, $attachment_id);
}
// ファイルが取得できたらループを抜ける
break;
}
}
}
}
add_action('save_post', 'set_youtube_thumbnail_as_featured_image');
この記述を追加することでYoutubeの動画を埋め込んだらその動画のサムネイルがその投稿のアイキャッチとなります。