Đồng bộ bài viết giữa nhiều site WordPress bằng API nội bộ

Trong một số hệ thống nhiều trang WordPress – chẳng hạn như một mạng lưới tin tức hoặc hệ thống microsite – việc đồng bộ bài viết giữa các site con là rất cần thiết. Thay vì copy thủ công hoặc dùng plugin nặng nề, bạn có thể tự xây dựng cơ chế đồng bộ bằng REST API nội bộ, đơn giản mà hiệu quả.

Đồng bộ bài viết giữa nhiều site WordPress bằng API nội bộ

1. Mô hình hoạt động

Ý tưởng là: site chính (master) sẽ cung cấp endpoint REST API để trả về dữ liệu bài viết theo định dạng JSON. Các site con sẽ định kỳ gọi endpoint này để lấy dữ liệu và đăng lên hệ thống của mình.

2. Tạo endpoint API ở site chính

add_action('rest_api_init', function () {
    register_rest_route('sync/v1', '/posts', [
        'methods' => 'GET',
        'callback' => 'sync_export_posts',
        'permission_callback' => '__return_true', // chỉ dùng nội bộ, nên bỏ xác thực nếu cần
    ]);
});

function sync_export_posts() {
    $args = [
        'post_type' => 'post',
        'posts_per_page' => 10,
        'post_status' => 'publish',
    ];
    $query = new WP_Query($args);
    $data = [];

    foreach ($query->posts as $post) {
        $data[] = [
            'title' => $post->post_title,
            'content' => $post->post_content,
            'date' => $post->post_date,
            'slug' => $post->post_name,
        ];
    }

    return $data;
}

3. Tạo script lấy và nhập dữ liệu ở site con

function sync_import_from_master() {
    $response = wp_remote_get('https://site-goc.com/wp-json/sync/v1/posts');
    if (is_wp_error($response)) return;

    $posts = json_decode(wp_remote_retrieve_body($response), true);

    foreach ($posts as $item) {
        // Kiểm tra xem bài đã tồn tại chưa
        $exists = get_page_by_path($item['slug'], OBJECT, 'post');
        if ($exists) continue;

        // Tạo mới
        wp_insert_post([
            'post_title' => $item['title'],
            'post_content' => $item['content'],
            'post_date' => $item['date'],
            'post_status' => 'publish',
            'post_type' => 'post',
            'post_name' => $item['slug'],
        ]);
    }
}

4. Chạy tự động với WP-Cron hoặc WP-CLI

Bạn có thể gắn sync_import_from_master() vào một cronjob nội bộ:

if (!wp_next_scheduled('sync_content_event')) {
    wp_schedule_event(time(), 'hourly', 'sync_content_event');
}
add_action('sync_content_event', 'sync_import_from_master');

Hoặc đơn giản hơn, chạy bằng WP-CLI:

wp eval 'sync_import_from_master();'

5. Lưu ý và mở rộng

  • Nên xác thực API nếu dùng bên ngoài nội bộ, ví dụ qua Bearer Token.
  • Chỉ đồng bộ các bài chưa tồn tại để tránh trùng lặp.
  • Có thể mở rộng để đồng bộ thumbnail, taxonomy, custom field.
  • Nên log lại các lần đồng bộ để debug khi cần thiết.

Lưu ý: REST API là công cụ mạnh mẽ trong WordPress. Khi triển khai sản phẩm thực tế, hãy cân nhắc đến bảo mật endpoint và tối ưu truy vấn.

Tổng kết

Với một chút tùy biến, bạn hoàn toàn có thể tự xây dựng hệ thống đồng bộ nội dung giữa các site WordPress mà không cần plugin bên ngoài. Cách làm này vừa nhẹ nhàng, vừa giúp bạn làm chủ hoàn toàn luồng dữ liệu trong hệ thống.

Bình luận


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...