Khi bạn đăng bài viết mới và trong nội dung có chứa link YouTube, WordPress sẽ tự động lấy ảnh thumbnail từ YouTube và đặt làm ảnh đại diện (featured image) cho bài viết nếu chưa có ảnh.
Thêm code sau vào file functions.php
của theme con (child theme) hoặc plugin riêng.
function auto_set_youtube_thumbnail_as_featured_image($post_id) { // Kiểm tra nếu bài viết chưa có ảnh đại diện if (has_post_thumbnail($post_id)) { return; } // Lấy nội dung bài viết $post = get_post($post_id); $content = $post->post_content; // Tìm đường dẫn YouTube trong bài if (preg_match('/(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/watch\?v=|youtu\.be\/)([^\s&]+)/', $content, $matches)) { $youtube_id = $matches[1]; // Tạo link thumbnail $thumbnail_url = "https://img.youtube.com/vi/$youtube_id/maxresdefault.jpg"; // Kiểm tra xem ảnh tồn tại (nếu không thì dùng ảnh mặc định) $response = wp_remote_head($thumbnail_url); if (wp_remote_retrieve_response_code($response) != 200) { $thumbnail_url = "https://img.youtube.com/vi/$youtube_id/hqdefault.jpg"; } // Tải ảnh về và gán làm ảnh đại diện require_once(ABSPATH . 'wp-admin/includes/file.php'); require_once(ABSPATH . 'wp-admin/includes/media.php'); require_once(ABSPATH . 'wp-admin/includes/image.php'); // Tải ảnh về $tmp = download_url($thumbnail_url); if (is_wp_error($tmp)) return; // Tạo mảng mô phỏng file upload $file_array = array( 'name' => $youtube_id . '.jpg', 'tmp_name' => $tmp, ); // Đính kèm ảnh vào media library $attachment_id = media_handle_sideload($file_array, $post_id); // Nếu thành công thì đặt làm ảnh đại diện if (!is_wp_error($attachment_id)) { set_post_thumbnail($post_id, $attachment_id); } } } add_action('save_post', 'auto_set_youtube_thumbnail_as_featured_image');
📌 Lưu ý:
Chỉ chạy khi đăng bài viết hoặc cập nhật.
Nếu bài viết đã có ảnh đại diện thì sẽ không ghi đè.
Nếu link YouTube không hợp lệ thì không đặt ảnh.