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