Tạo webhook nội bộ giữa các hệ thống WordPress

Trong môi trường có nhiều site WordPress (ví dụ: multisite tách biệt hoặc hệ thống liên kết nội bộ), việc thiết lập webhook nội bộ giúp bạn phản hồi, đồng bộ hoặc thông báo sự kiện giữa các hệ thống theo thời gian thực mà không cần đến plugin bên thứ ba.

Tạo webhook nội bộ giữa các hệ thống WordPress

1. Webhook là gì và khi nào cần?

Webhook là một đoạn URL mà hệ thống khác có thể gửi dữ liệu đến (thường qua phương thức POST) khi có sự kiện xảy ra, ví dụ như:

  • Khi có bài viết mới trên site A → gọi webhook trên site B để lấy về và hiển thị lại.
  • Khi người dùng đăng ký trên một site → gọi webhook tạo tài khoản tương ứng ở site khác.

Lưu ý: Webhook nội bộ vẫn là HTTP request, nhưng thường là trong cùng hệ thống hoặc đã xác định danh tính.

2. Tạo endpoint webhook trong WordPress

Thêm đoạn sau vào functions.php để tạo endpoint nhận dữ liệu:

// Ví dụ: https://yoursite.com/wp-json/internal/v1/webhook

add_action('rest_api_init', function () {
  register_rest_route('internal/v1', '/webhook', [
    'methods' => 'POST',
    'callback' => 'handle_internal_webhook',
    'permission_callback' => '__return_true',
  ]);
});

function handle_internal_webhook(WP_REST_Request $request) {
  $data = $request->get_json_params();

  // Kiểm tra token nội bộ để tránh lạm dụng
  if ($data['token'] !== 'your_internal_token') {
    return new WP_REST_Response(['message' => 'Unauthorized'], 403);
  }

  // Xử lý dữ liệu nhận được
  // Ví dụ: ghi log, tạo bài viết, cập nhật user...

  return new WP_REST_Response(['message' => 'Webhook received'], 200);
}

3. Gửi dữ liệu đến webhook

Ở site gửi dữ liệu (ví dụ trong save_post):

function notify_other_site($post_ID) {
  $post = get_post($post_ID);

  if ($post->post_status !== 'publish') return;

  wp_remote_post('https://othersite.com/wp-json/internal/v1/webhook', [
    'headers' => ['Content-Type' => 'application/json'],
    'body' => json_encode([
      'token' => 'your_internal_token',
      'post_id' => $post->ID,
      'title' => $post->post_title,
      'content' => $post->post_content
    ])
  ]);
}
add_action('publish_post', 'notify_other_site');

4. Lưu ý bảo mật

  • Luôn dùng token (hoặc JWT/OAuth nếu cần cao hơn) để xác thực request.
  • Giới hạn IP nội bộ hoặc dùng VPN để tăng bảo mật.
  • Ghi log request để debug dễ dàng.

5. Ứng dụng thực tế

  • Đồng bộ sản phẩm giữa nhiều site bán hàng.
  • Gửi thông báo từ site chính đến microsite vệ tinh.
  • Kết nối trang blog với hệ thống diễn đàn hoặc tài liệu.

Mẹo hay: Bạn có thể dùng set_transient() để tạm lưu các request và xử lý chúng sau bằng cron nếu không muốn xử lý realtime.

Kết luận

Webhook nội bộ giúp bạn xây dựng một hệ thống WordPress linh hoạt, có thể phản hồi nhanh chóng mà không cần các plugin nặng nề. Khi dùng đúng cách, nó là một giải pháp tuyệt vời để kết nối dữ liệu giữa các site một cách hiệu quả và an toàn.

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...