Học WordPress + AI / WordPress cho người VIỆT !
WPShare247

Học wordpress cho người mới bắt đầu

  • Bắt đầu
    • Học WordPress
    • Elementor
    • WooCommerce
    • Tạo WordPress
    • Học WordPress kiểu mới 2025
    • Học PHP cơ bản
    • Tạo Website bằng WordPress
    • Quản trị WordPress
    • Sửa lỗi WordPress
    • Theme wordpress
    • Plugin WordPress
    • Hàm PHP
    • Seo WordPress
    • Bảo mật WordPress
    • Html & Css
    • Javascript và jQuery
    • Hướng dẫn lập trình
  • Video
    • Video TikTok
    • Video Shorts
  • Kho plugin
  • Tải Web Miễn Phí
  • Công cụ
    • Kiểm tra web WordPress
    • WordPress theme gì?
    • Check IP Website
    • Kiểm tra Tên Miền
    • Kiểm Tra SSL
    • Tạo File Disavow Google
    • Tạo QR Code
  • Giới thiệu
    • Khuyến Mãi
  • Đăng nhập
X
☰

Trang chủ » Code WordPress » Kinh nghiệm tích hợp code API Youtube lấy Video về WordPress

📌 Mới: Bạn có thể 🧠 đặt câu hỏi cho AI về nội dung bài viết này ở cuối trang!

Kinh nghiệm tích hợp code API Youtube lấy Video về WordPress

Xuất bản vào 25/11/2025 bởi Chinsu Man Xem: 2096
Shares
ChatGPT ChatGPT
Share
Share
Pin

CHƯƠNG TRÌNH GIẢM 50% GIÁ TẤT CẢ CÁC GÓI HOSTING WORDPRESS => Link giảm 50%

Bài viết hướng dẫn có chứa CODE - Copy và sử dụng chúng sẽ tiện hơn cho bạn.

Lập trình WordPress hiện nay thiên về kiểm soát luồng logic hơn là kỹ năng viết code thủ công. Đơn giản vì AI đã làm quá tốt phần việc cung cấp code chuẩn và chính xác, vấn đề còn lại là cách chúng ta điều phối nó.

Thật ra bây giờ chỉ cần gõ vài dòng vào AI là nó có thể trả cho bạn cả đống đoạn code tích hợp API YouTube. Nhưng nếu bạn từng làm nhiều như tôi, bạn sẽ biết… phần lớn những đoạn đó chỉ là lý thuyết, nhìn thì có vẻ “xịn” nhưng đem vào WordPress thật lại phát sinh đủ thứ chuyện: lỗi quota, lỗi hiển thị, hoặc không tối ưu cho tốc độ tải trang.

🌱 Nếu thấy bài viết hữu ích, bạn có thể ủng hộ tác giả bằng cách nhấn vào quảng cáo bên dưới — như một donate miễn phí. Bạn không mất gì nhưng chúng tôi sẽ có thêm chi phí để duy trì và vận hành website. Cảm ơn bạn! 🙏

Tôi đã từng mất rất nhiều thời gian thử và sửa những đoạn code kiểu đó, cho tới khi tự rút ra được quy trình riêng, chắc tay và hiệu quả hơn rất nhiều. Bài viết này không phải là bản tóm tắt của AI, mà là kinh nghiệm thực tế của tôi – người đã viết hàng trăm bài chuyên sâu về WordPress và API. Nếu bạn thật sự muốn hiểu cách kéo video về site sao cho ổn định, nhanh và không tốn quota vô ích, thì bài này đáng để bạn đọc kỹ từ đầu đến cuối.

1. Chức năng này để làm gì?

Tích hợp YouTube Data API vào WordPress giúp website của bạn tự động lấy và hiển thị video từ kênh YouTube mà không cần phải chèn thủ công từng link một. Điều này cực kỳ hữu ích nếu bạn thường xuyên đăng video mới, vì website sẽ luôn cập nhật nội dung mới nhất từ kênh. Ngoài ra, bạn còn có thể tùy chỉnh số lượng video hiển thị, cách trình bày (dạng lưới, danh sách…) để phù hợp với giao diện của trang web.

Kinh nghiệm tích hợp code API Youtube lấy Video về WordPress

Tự động kéo video từ Youtube về Website

2. Code tích hợp API

Chuẩn bị gì?

  • 1/ API Key Google (Xem video bên dưới)
  • 2/ Tài khoản Hosting truy cập source code WordPress (Chỉ áp dụng cho Web chạy trên hosting riêng hoặc VPS)

Xem video hướng dẫn tạo Google API key cho các bạn mới lập trình.

2.1 Code khai báo functions.php

Copy đoạn code sau vào trong file functions.php

// Hàm lấy 1 "page" kết quả search.list
function wpshare247_youtube_search_page($api_key, $channel_id, $max_results = 12, $pageToken = '') {
    $args = array(
        'part'      => 'snippet',
        'channelId' => $channel_id,
        'maxResults'=> intval($max_results),
        'order'     => 'date',
        'type'      => 'video',
        'key'       => $api_key,
    );
    if ( $pageToken ) $args['pageToken'] = $pageToken;

    $url = add_query_arg($args, 'https://www.googleapis.com/youtube/v3/search');
    $res = wp_remote_get($url, array('timeout' => 20));
    if ( is_wp_error($res) ) return array('items'=>array(), 'nextPageToken'=>'', 'prevPageToken'=>'');
    $body = wp_remote_retrieve_body($res);
    $data = json_decode($body, true);
    return array(
        'items' => $data['items'] ?? array(),
        'nextPageToken' => $data['nextPageToken'] ?? '',
        'prevPageToken' => $data['prevPageToken'] ?? '',
    );
}

2.2 Tạo template page

Tạo 1 template page: page-youtube.php

<?php
/* Template Name: Video Youtube */

$youtube_api_key = 'your-api-key';
$channel_id      = 'your-id';
$max_results     = 12;

// ====== AJAX MODE: trả JSON ======
if ( isset($_GET['ajax']) && $_GET['ajax'] == '1' ) {
    $pageToken = isset($_GET['pageToken']) ? sanitize_text_field($_GET['pageToken']) : '';
    $page = wpshare247_youtube_search_page($youtube_api_key, $channel_id, $max_results, $pageToken);
    $items = $page['items'];

    ob_start();
    if ( ! empty($items) ) {
        foreach ( $items as $video ) {
            if ( empty($video['id']['videoId']) ) continue;
            $video_id = esc_attr($video['id']['videoId']);
            $title    = esc_html($video['snippet']['title'] ?? '');
            ?>
            <div class="youtube-video-item" style="flex:0 0 300px;margin-bottom:20px;">
                <iframe width="300" height="500"
                    src="https://www.youtube.com/embed/<?php echo $video_id; ?>?rel=0"
                    title="<?php echo $title; ?>"
                    frameborder="0"
                    allowfullscreen>
                </iframe>
                <p style="margin:8px 0 0;font-size:14px;"><?php echo $title; ?></p>
            </div>
            <?php
        }
    }
    $html = ob_get_clean();

    wp_send_json_success( array(
        'html' => $html,
        'nextPageToken' => $page['nextPageToken'],
    ) );
    exit;
}
// ====== END AJAX ======

get_header();

// Lượt load thường (đầu trang)
$pageToken = isset($_GET['pageToken']) ? sanitize_text_field($_GET['pageToken']) : '';
$page = wpshare247_youtube_search_page($youtube_api_key, $channel_id, $max_results, $pageToken);
$videos = $page['items'];
$nextToken = $page['nextPageToken'];
?>

<section class="ws247-container">
    <main class="content full-width">
        <div class="content-block">
            <?php while ( have_posts() ) : the_post(); ?>
                <?php echo wpshare247_overide_yoast_breadcrumb(); ?>

                <header class="entry-header">
                    <h1 class="entry-title" itemprop="headline"><?php the_title(); ?></h1>
                </header>

                <div class="entry-content" itemprop="text">
                    <?php the_content(); ?>
                </div>

                <div class="youtube-shorts-list" style="display:flex;flex-wrap:wrap;gap:20px;">
                    <?php if ( !empty($videos) ) : ?>
                        <?php foreach ( $videos as $video ) :
                            if ( empty($video['id']['videoId']) ) continue;
                            $video_id = $video['id']['videoId'];
                            $title    = $video['snippet']['title'];
                            ?>
                            <div class="youtube-video-item" style="flex:0 0 300px;margin-bottom:20px;">
                                <iframe width="300" height="500"
                                    src="https://www.youtube.com/embed/<?php echo esc_attr($video_id); ?>?rel=0"
                                    title="<?php echo esc_attr($title); ?>"
                                    frameborder="0"
                                    allowfullscreen>
                                </iframe>
                                <p style="margin:8px 0 0;font-size:14px;"><?php echo esc_html($title); ?></p>
                            </div>
                        <?php endforeach; ?>
                    <?php else: ?>
                        <p>Lượng truy cập API trực tiếp quá nhiều, vui lòng xem video ở kênh nhé <a href="https://www.youtube.com/@hocwordpress/videos" target="_blank">Kênh Học WordPress</a></a></p>
                    <?php endif; ?>
                </div>

                <?php if ( $nextToken ) : ?>
                    <div style="text-align:center;margin-top:20px;">
                        <button id="yt-load-more" data-next="<?php echo esc_attr($nextToken); ?>" style="padding:10px 18px;border:1px solid #ddd;background:#fff;cursor:pointer;">
                            Xem Thêm
                        </button>
                    </div>
                <?php endif; ?>

            <?php endwhile; ?>
        </div>
    </main>
</section>

<script>
document.addEventListener('DOMContentLoaded', function(){
    var btn = document.getElementById('yt-load-more');
    if (!btn) return;
    btn.addEventListener('click', function(e){
        e.preventDefault();
        var next = btn.dataset.next;
        if (!next) return;
        btn.disabled = true;
        var oldText = btn.textContent;
        btn.textContent = 'Đang tải...';

        var baseUrl = window.location.href.split('?')[0];
        var url = baseUrl + '?ajax=1&pageToken=' + encodeURIComponent(next);

        fetch(url, { credentials: 'same-origin' })
        .then(function(resp){ return resp.json(); })
        .then(function(json){
            if ( json && json.success && json.data ) {
                var container = document.querySelector('.youtube-shorts-list');
                if ( container ) {
                    var wrapper = document.createElement('div');
                    wrapper.innerHTML = json.data.html;
                    while ( wrapper.firstChild ) {
                        container.appendChild(wrapper.firstChild);
                    }
                }
                if ( json.data.nextPageToken ) {
                    btn.dataset.next = json.data.nextPageToken;
                    btn.disabled = false;
                    btn.textContent = oldText;
                } else {
                    btn.style.display = 'none';
                }
            } else {
                console.error('Invalid response', json);
                btn.disabled = false;
                btn.textContent = oldText;
            }
        })
        .catch(function(err){
            console.error(err);
            btn.disabled = false;
            btn.textContent = oldText;
        });
    });
});
</script>

<?php get_footer(); ?>
  • $youtube_api_key thay bằng API Key tạo ở bước xem video
  • $channel_id là ID của bất kì một kênh Youtube ( Có thể của bạn hoặc của một ai đó )
ID kênh yotube

Cách tìm ID kênh yotube chính xác

Nếu chưa biết cách tạo custom template page, bạn có thể xem bài viết này

Hướng dẫn cách tạo Custom Page Templates WordPress

Gợi ý thêm: Không nhất thiết là tạo page, bạn cũng có thể dùng shortcode cũng rất ổn áp.

Kinh nghiệm tích hợp code API Youtube lấy Video về WordPress

Kết Quả Sau Khi Tích Hợp Code Thành Công

3. Một số lỗi cần chú ý sau khi tích hợp thành công

Khi tích hợp YouTube Data API v3, ban đầu hệ thống hoạt động bình thường nhưng sau một thời gian sử dụng, giao diện bắt đầu báo “Không tìm thấy video nào” mặc dù các truy vấn không hề thay đổi. Kiểm tra trong Google Cloud Console cho thấy tỉ lệ lỗi tăng cao, đồng thời chỉ số “Queries per day” đã đạt 100%.

Nguyên nhân là do dự án (project) đã sử dụng hết hạn mức quota hằng ngày mà YouTube cấp mặc định (10.000 đơn vị/ngày). Khi quota bị vượt, tất cả các API Key thuộc cùng dự án sẽ không thể tiếp tục truy vấn, dẫn tới việc API trả về mảng dữ liệu trống (items: []) hoặc thông báo lỗi tương tự.

Kinh nghiệm tích hợp code API Youtube lấy Video về WordPress

Lỗi: Không tìm thấy video nào.

Lý do có thể: API Key bị giới hạn hoặc vượt quota. Chúng ta có thể kiểm tra bằng cách như sau:

 

Kinh nghiệm tích hợp code API Youtube lấy Video về WordPress

Kinh nghiệm tích hợp code API Youtube lấy Video về WordPress

Kinh nghiệm tích hợp code API Youtube lấy Video về WordPress

Cách xử lý khi API YouTube báo “Không tìm thấy video nào”

Nguyên nhân chính là bạn đã sử dụng hết giới hạn (quota) mà YouTube Data API cấp cho mỗi ngày. Khi quota đạt 100%, Google sẽ từ chối các request mới và thường trả về dữ liệu rỗng (items: []), khiến bạn tưởng là không có video.

Để khắc phục, bạn có thể áp dụng một trong các cách sau:

  • Chờ reset quota hằng ngày
    Google sẽ tự động làm mới quota vào đầu ngày (theo giờ PST – múi giờ Mỹ). Sau khi quota được reset, API sẽ hoạt động bình thường trở lại.
  • Tạo thêm API Key mới
    Nếu cần tiếp tục sử dụng ngay, bạn có thể tạo thêm một API Key khác trong Google Cloud Console, bật quyền truy cập cho YouTube Data API v3 rồi thay vào dự án của mình. Đây là cách tạm thời để “chia tải” khi key cũ đã hết quota.
  • Gửi yêu cầu tăng quota
    Trong phần Quota của Google Cloud, bạn có thể bấm vào biểu tượng chỉnh sửa để gửi yêu cầu tăng hạn mức truy cập hằng ngày. Nếu bạn có website thực tế hoặc lượng người dùng lớn, Google thường sẽ xét duyệt tăng thêm.
  • Tối ưu số lượng request
    Hạn chế gọi API liên tục không cần thiết. Nên:

    • Gom nhiều thông tin vào 1 request thay vì gọi rời rạc.
    • Lưu (cache) dữ liệu trong database hoặc bộ nhớ tạm, tránh gọi lại mỗi lần tải trang.
    • Kiểm soát số lượng request từ người dùng.

Với các cách trên, bạn có thể nhanh chóng xử lý tình trạng quota đầy và đảm bảo API hoạt động ổn định, tránh lỗi “Không tìm thấy video nào” gây hiểu nhầm cho người dùng.

4. Cách Giải Quyết Vấn Nạn Truy Cập Quá Nhiều Dẫn Tới Vượt Quá Dung Lượng API

Khi website của bạn có lượng truy cập lớn, việc gọi trực tiếp API YouTube cho mỗi lượt xem có thể dẫn đến vượt quota (giới hạn dung lượng) mà Google cấp mỗi ngày. Điều này khiến video không còn hiển thị đúng cách hoặc trả về lỗi. Để khắc phục, bạn có thể áp dụng các giải pháp sau:

  • Sử dụng bộ nhớ đệm (Cache) hoặc Transient API:
    Thay vì gọi API mỗi lần người dùng truy cập, bạn có thể lưu tạm kết quả trả về từ YouTube (dưới dạng JSON) vào WordPress trong một khoảng thời gian nhất định (ví dụ: 6 giờ hoặc 1 ngày).
    Khi có người truy cập, website sẽ lấy dữ liệu đã lưu sẵn → giảm số lần gọi API đáng kể.
  • Giới hạn số lượng video tải về:
    Không nên gọi quá nhiều video mỗi lần tải trang. Chỉ nên hiển thị 5–10 video mới nhất và có nút “Xem thêm” để người dùng chủ động tải thêm.
  • Dùng API Key phụ (nếu cần):
    Với các dự án lớn, bạn có thể tạo thêm API Key từ nhiều tài khoản Google khác nhau rồi xoay vòng khi gần hết quota — giúp hệ thống hoạt động ổn định hơn.
  • Sử dụng WP Cron để cập nhật định kỳ:
    Thay vì gọi API khi người dùng truy cập, bạn có thể thiết lập WP Cron để hệ thống tự động lấy video mới mỗi vài giờ. Như vậy, dữ liệu luôn mới mà không tốn lượt API theo thời gian thực.
  • Tối ưu giao diện tải video (Lazy Load):
    Chỉ tải video khi người dùng cuộn xuống tới khu vực hiển thị, tránh gọi API hoặc render video khi chưa cần thiết.

5. Bạn cần chú ý gì?

Tích hợp YouTube Data API vào WordPress không chỉ là chuyện copy một đoạn code từ AI và dán vào. Nếu triển khai thực tế, bạn sẽ gặp ngay các vấn đề như vượt quota, tốc độ tải chậm, lỗi hiển thị hoặc không kiểm soát được số lượng truy vấn đến Google.

Bài viết này trình bày quy trình thực chiến đã được kiểm chứng:

  • Viết function lấy video từ API
  • Tạo template hiển thị video trên website
  • Sử dụng AJAX để tải thêm video mà không reload trang
  • Bổ sung xử lý lỗi và hiển thị thân thiện khi API trả về kết quả rỗng

Đặc biệt, phần quan trọng nhất chính là kinh nghiệm tối ưu, bao gồm:

  • Hạn chế gọi API trực tiếp ở mỗi lượt truy cập
  • Sử dụng caching (transient) hoặc WP Cron để giảm tải
  • Chỉ load vừa đủ video, ưu tiên lazy-load
  • Tạo thêm hoặc xoay vòng API Keys khi website lớn
  • Chủ động theo dõi quota để tránh “xụp hệ thống đột ngột”

Làm tốt các yếu tố trên, bạn sẽ có một trang WordPress:

✔ Tự động lấy video từ YouTube
✔ Hoạt động ổn định lâu dài
✔ Không dễ bị vượt hạn mức API
✔ Tải nhanh và thân thiện người dùng

Đây là sự khác biệt giữa code AI lý thuyết và giải pháp thực tế triển khai cho khách hàng hoặc website lớn.
Hy vọng bạn áp dụng thành công và tối ưu tốt hơn hệ thống YouTube tích hợp vào WordPress của mình.

CHƯƠNG TRÌNH GIẢM 50% GIÁ TẤT CẢ CÁC GÓI HOSTING WORDPRESS => Link giảm 50%

❓ Hỏi AI về nội dung bài viết

Tóm tắt nội dung chính Gợi ý mục quan trọng Giải thích mục 1 rõ hơn Viết lại đoạn văn cho dễ hiểu Rút gọn văn bản mà vẫn đủ ý Thêm ví dụ minh hoạ cho đoạn 1 Lọc keyword từ khóa bài viết Lọc thuật ngữ Dịch bài viết sang: Tiếng Anh
Nếu bài viết chưa giải đáp hết thắc mắc của bạn, hãy hỏi WPSHARE247 AI – trợ lý thông minh sẵn sàng hỗ trợ ngay trong nội dung bài viết.

Bạn muốn tích hợp chức năng Hỏi AI trực tiếp dưới mỗi bài viết trên website? Hãy liên hệ dịch vụ thiết kế web tại Website366.com để được hỗ trợ triển khai nhanh chóng và chuyên nghiệp.

Shares
ChatGPT ChatGPT
Share
Share
Pin
← Bài cũ hơn
API YoutubeGoogle API KEY
Bài viết liên quan
  • Tài liệu hướng dẫn tích hợp AI Gemini trực tiếp vào WordPress thông qua API Google từng bước cụ thể

    Tài liệu hướng dẫn tích hợp AI Gemini trực tiếp vào WordPress thông qua API Google từng bước cụ thể

  • Thử kết nối API trong WordPress cho người mới học code (cập nhật 2025)

    Thử kết nối API trong WordPress cho người mới học code (cập nhật 2025)

  • Tài liệu Hướng Dẫn Upload File Lên WordPress Bằng Ajax Dành Cho Người Mới

    Tài liệu Hướng Dẫn Upload File Lên WordPress Bằng Ajax Dành Cho Người Mới

  • Dùng Sublime Text lập trình Web, hỗ trợ đa nền tảng ngôn ngữ

    Dùng Sublime Text lập trình Web, hỗ trợ đa nền tảng ngôn ngữ

Học thiết kế Web WordPress

Download WordPress

Tải bản WordPress mới nhất

Tiếng Việt: Tải WordPress Mới

Quốc tế: Tải WordPress Mới

Liên kế MXH của WPShare247

Tìm thấy những kiến thức mới từ WPShare247

Giảm 50% Hosting

Xem chi tiết giảm giá 50% gói lưu trự Hosting tại đây => Link giảm 50%

Cách tạo Web bán hàng Bằng Flatsome

https://www.youtube.com/watch?v=gnT8Dn_KiXU

Video Tiktok mới nhất

@hocwordpress Tạo Landing Page nhanh dành cho công ty muốn có nhiều web quảng cáo tăng doanh thu bằng WordPress được thiết kế bằng Plug-in Elementor free ( bản miễn phí ) #landingpage #elementor #wordpress #digitalmarketing #wpshare247 ♬ nhạc nền - Học WordPress - WPSHARE247.COM

Cách tạo Website WordPress 2025

https://www.youtube.com/watch?v=HtbtsH8q-KU

Bộ WIDGETS WS247 Đa Năng

Giúp bạn Thiết kế Website WordPress giống mẫu 99% trong thời gian ngắn nhất (Có bản nâng cấp mới V2). Download tại đây

 

Xem chi tiết tại đây  https://wpshare247.com/chia-se-bo-field-widget-giup-ban-thiet-ke-website-wordpress-nhanh-hon

MUA HOSTING – TẶNG BUỔI HỌC WP

Tặng 03 buổi (Mỗi buổi 30 phút) hỗ trợ miễn phí, tất cả các chuyên đề nào về học thiết kế website bằng WordPress khi mua Hosting và Tên miền => tại đây [ Có thể liên hệ bất cứ giờ nào để hỗ trợ học WP ]

Tôi đang cần...
Cách làm blog Plugin Wordpress Bảo mật Wordpress Seo với Wordpress Lỗi Wordpress WooCommerce

MUA HOSTING – TẶNG BUỔI HỌC WP

Chủ đề

  • Code WordPress
  • Hàm WordPress
  • Hướng dẫn WordPress
  • Theme wordpress
  • WooCommerce
  • Seo WordPress
  • Html & Css
  • Javascript và jQuery
  • Plugin WordPress
  • Hướng dẫn lập trình

Tag

add_action (2) add_filter (2) admin code (2) ajax wordpress (2) alt (2) Block Theme (2) cart (4) Contact Form 7 (8) css (4) custom post type (2) cài wordpress (2) danh mục sản phẩm (2) elementor (2) elementor free (2) filter (2) flatsome (2) functions.php (2) google font (2) hosting (2) html css (2) hướng dẫn dùng plugin (4) học wordpress (7) javascript (5) jquery (3) localhost (2) Loop (2) mysql (4) ngôn ngữ (2) phpmyadmin (3) plugin (4) plugin wordpress (2) Product (4) SMTP (2) Sản phẩm (3) theme option (2) Theme Wordpress (3) widget (2) woocommerce (25) wordpress (5) WordPress 2025 (2) wp-config (2) wp_enqueue_scripts (2) WP_Query (6) xampp (4) Yoast SEO (2)
Về WPShare247

Học wordpress cho người mới bắt đầu.

WPShare247 là blog chia sẻ các kiến thức về WordPress, sửa chữa lỗi wordpress, giới thiệu theme và plugin wordpress mới nhất. Đào tạo khóa học thiết kế Website bằng WordPress.

Menu
  • Trang chủ
  • Giới thiệu
  • Blog
  • Plugin WordPress
  • Liên hệ
Chủ đề wordpress
  • Sửa lỗi WordPress
  • Plugin WordPress
  • Theme wordpress
  • Seo WordPress
  • WooCommerce

Copyright © 2025 WPSHARE247. All Rights Reserved.
Một sản phẩm của WEB 366

  • Thiết kế web bởi Website366.com
  • Thiết kế website chuyên nghiệp TBAY.VN
  • Thiết kế website bán hàng