Cách tạo form AJAX WordPress trong 4 bước

6 giờ ago, WordPress Plugin, Views
Cách tạo form AJAX WordPress trong 4 bước

Giới thiệu về Form AJAX trong WordPress

AJAX (Asynchronous JavaScript and XML) là một kỹ thuật cho phép bạn cập nhật một phần của trang web mà không cần tải lại toàn bộ trang. Điều này mang lại trải nghiệm người dùng mượt mà và nhanh chóng hơn. Trong WordPress, việc sử dụng AJAX cho form (biểu mẫu) trở nên rất phổ biến, đặc biệt là cho các form liên hệ, form đăng ký, hoặc các form gửi dữ liệu khác.

Thay vì người dùng phải đợi trang web tải lại sau mỗi lần gửi form, AJAX cho phép dữ liệu được gửi ngầm và kết quả được hiển thị ngay lập tức. Điều này giúp tăng tính tương tác và hiệu quả của trang web.

Bài viết này sẽ hướng dẫn bạn cách tạo form AJAX trong WordPress trong 4 bước đơn giản.

Bước 1: Tạo Form HTML

Đầu tiên, chúng ta cần tạo form HTML mà người dùng sẽ tương tác. Form này có thể chứa các trường nhập liệu như tên, email, nội dung, và một nút gửi. Bạn có thể đặt form này trong một file template của theme WordPress, hoặc tạo một shortcode để dễ dàng chèn vào bất kỳ trang hoặc bài viết nào.

Ví dụ về một form HTML đơn giản:


<form id="ajax-contact-form">
    <label for="name">Tên:</label>
    <input type="text" id="name" name="name" required><br><br>

    <label for="email">Email:</label>
    <input type="email" id="email" name="email" required><br><br>

    <label for="message">Nội dung:</label>
    <textarea id="message" name="message" required></textarea><br><br>

    <input type="submit" value="Gửi">
    <div id="form-messages"></div>
</form>

Trong ví dụ này:

  • id="ajax-contact-form" là ID của form, chúng ta sẽ sử dụng nó trong JavaScript để xử lý sự kiện gửi form.
  • Các trường name, email, và message là các trường nhập liệu.
  • <div id="form-messages"></div> là nơi chúng ta sẽ hiển thị thông báo thành công hoặc lỗi.

Bước 2: Viết JavaScript để Xử lý Form AJAX

Tiếp theo, chúng ta cần viết JavaScript để xử lý sự kiện gửi form và gửi dữ liệu đến máy chủ thông qua AJAX. Bạn nên đặt JavaScript này trong một file riêng (ví dụ: custom.js) và include vào theme của bạn.

Ví dụ về JavaScript:


jQuery(document).ready(function($) {
    $('#ajax-contact-form').submit(function(e) {
        e.preventDefault();

        var name = $('#name').val();
        var email = $('#email').val();
        var message = $('#message').val();

        $.ajax({
            type: 'POST',
            url: ajaxurl, // Biến được WordPress định nghĩa
            data: {
                action: 'process_ajax_form', // Tên action
                name: name,
                email: email,
                message: message
            },
            beforeSend: function() {
                $('#form-messages').html('Đang gửi...');
            },
            success: function(response) {
                $('#form-messages').html(response);
                $('#ajax-contact-form')[0].reset(); // Xóa dữ liệu trong form sau khi gửi thành công
            },
            error: function(jqXHR, textStatus, errorThrown) {
                $('#form-messages').html('Lỗi: ' + textStatus + ' - ' + errorThrown);
            }
        });
    });
});

Giải thích:

  • jQuery(document).ready(function($) { ... }); đảm bảo rằng code chỉ chạy sau khi trang web đã tải xong.
  • $('#ajax-contact-form').submit(function(e) { ... }); lắng nghe sự kiện submit của form.
  • e.preventDefault(); ngăn chặn hành vi mặc định của form (tải lại trang).
  • ajaxurl là một biến JavaScript được WordPress định nghĩa, chứa URL đến file admin-ajax.php.
  • data chứa dữ liệu chúng ta muốn gửi đến máy chủ, bao gồm action và các trường form.
  • beforeSend, success, và error là các callback functions xử lý các giai đoạn khác nhau của yêu cầu AJAX.

Bước 3: Xử lý AJAX trên Máy Chủ (PHP)

Bây giờ chúng ta cần xử lý yêu cầu AJAX trên máy chủ (PHP). Chúng ta sẽ tạo một function PHP và móc nó vào action ‘process_ajax_form’ mà chúng ta đã định nghĩa trong JavaScript. Bạn có thể đặt code này trong file functions.php của theme, hoặc tạo một plugin riêng.

Ví dụ về PHP:


add_action( 'wp_ajax_process_ajax_form', 'process_ajax_form_callback' );
add_action( 'wp_ajax_nopriv_process_ajax_form', 'process_ajax_form_callback' ); // Cho người dùng chưa đăng nhập

function process_ajax_form_callback() {
    $name = sanitize_text_field( $_POST['name'] );
    $email = sanitize_email( $_POST['email'] );
    $message = sanitize_textarea_field( $_POST['message'] );

    // Xử lý dữ liệu ở đây (ví dụ: gửi email)
    $to = 'your_email@example.com';
    $subject = 'Tin nhắn từ form liên hệ AJAX';
    $body = "Tên: $namenEmail: $emailnNội dung:n$message";
    $headers = array('Content-Type: text/html; charset=UTF-8');

    $mail_result = wp_mail( $to, $subject, $body, $headers );

    if ( $mail_result ) {
        echo 'Gửi thành công! Chúng tôi sẽ liên hệ với bạn sớm nhất có thể.';
    } else {
        echo 'Có lỗi xảy ra trong quá trình gửi. Vui lòng thử lại sau.';
    }

    wp_die(); // Bắt buộc để kết thúc AJAX properly
}

Giải thích:

  • add_action( 'wp_ajax_process_ajax_form', 'process_ajax_form_callback' ); móc function process_ajax_form_callback vào action wp_ajax_process_ajax_form.
  • add_action( 'wp_ajax_nopriv_process_ajax_form', 'process_ajax_form_callback' ); tương tự như trên, nhưng cho người dùng chưa đăng nhập (nếu form của bạn dành cho khách).
  • sanitize_text_field, sanitize_email, và sanitize_textarea_field được sử dụng để làm sạch dữ liệu đầu vào, tránh các tấn công XSS.
  • wp_mail là function WordPress để gửi email.
  • wp_die(); là bắt buộc để kết thúc AJAX properly và trả về kết quả cho trình duyệt.

Bước 4: Include JavaScript và Kích hoạt AJAX

Cuối cùng, chúng ta cần include file JavaScript vào theme của bạn và đảm bảo rằng ajaxurl được định nghĩa. Bạn có thể làm điều này bằng cách sử dụng function wp_enqueue_scripts trong file functions.php.

Ví dụ:


function enqueue_custom_scripts() {
    wp_enqueue_script( 'custom-script', get_template_directory_uri() . '/js/custom.js', array( 'jquery' ), '1.0', true );

    wp_localize_script( 'custom-script', 'ajaxurl', admin_url( 'admin-ajax.php' ) );
}
add_action( 'wp_enqueue_scripts', 'enqueue_custom_scripts' );

Giải thích:

  • wp_enqueue_script đăng ký và include file JavaScript của bạn.
  • get_template_directory_uri() . '/js/custom.js' là đường dẫn đến file JavaScript của bạn.
  • array( 'jquery' ) chỉ ra rằng file JavaScript của bạn phụ thuộc vào jQuery.
  • '1.0' là phiên bản của script.
  • true chỉ ra rằng script sẽ được load ở footer.
  • wp_localize_script tạo một biến JavaScript (ajaxurl) và gán giá trị là URL đến file admin-ajax.php.

Sau khi hoàn thành các bước trên, form AJAX của bạn sẽ hoạt động. Người dùng có thể gửi form mà không cần tải lại trang, và bạn sẽ nhận được email với nội dung form.

Lời Khuyên Thêm

  • **Kiểm tra và làm sạch dữ liệu đầu vào:** Luôn luôn kiểm tra và làm sạch dữ liệu đầu vào từ form để tránh các tấn công bảo mật.
  • **Xử lý lỗi:** Cung cấp thông báo lỗi rõ ràng cho người dùng nếu có lỗi xảy ra trong quá trình gửi form.
  • **Sử dụng reCAPTCHA:** Sử dụng reCAPTCHA hoặc các biện pháp khác để ngăn chặn spam.
  • **Tối ưu hóa hiệu suất:** Tối ưu hóa code JavaScript và PHP của bạn để đảm bảo hiệu suất tốt.
  • **Kiểm tra trên nhiều trình duyệt:** Kiểm tra form của bạn trên nhiều trình duyệt và thiết bị để đảm bảo tính tương thích.

Chúc bạn thành công!