Hướng dẫn cách tự hiển thị ảnh đại diện từ video youtube khi đăng web

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.

Rate this post

Trả lời

Nhắn tin qua Zalo

0932644183