Tôi biết điều này đã cũ, nhưng trong trường hợp nó giúp bất kỳ ai khác vấp phải điều này ...
những gì tôi thường làm là đặt một số loại cờ trong biểu mẫu lối vào của tôi để biểu thị rằng yêu cầu đến là ajax.
<input type="hidden" id="my_ajax_flag" name="my_ajax_flag" value="false" />
Ban đầu, cái này được đặt thành "false", sau đó tôi chuyển thành "true" trong khi bắt đầu xử lý ajax.
$('#my_ajax_flag').val('true'); // example using jQuery
sau đó ở phía quản trị viên của mã của tôi, tôi kiểm tra tham số đó và sau đó bao gồm các móc ajax của tôi hoặc thực hiện công cụ quản trị không phải là ajax thông thường của tôi. Ví dụ:
if ( isset( $_REQUEST['my_ajax_flag'] ) && $_REQUEST['my_ajax_flag'] == 'true' ) {
add_action('wp_ajax_my_ajax_function', 'my_ajax_function');
add_action('wp_ajax_no_priv_my_ajax_function', 'my_ajax_function');
} else {
// regular non-ajax stuff
}
tùy thuộc vào những gì bạn cần làm, có nhiều biến thể của ý tưởng này, nhưng nó cho phép bạn giữ mã quản trị thường xuyên của mình không can thiệp hoặc bắn trong khi thực hiện các yêu cầu ajax.
một đề xuất khác có thể hữu ích là đặt thuộc tính "noheader" của WordPress trong các biểu mẫu của bạn.
<input type="hidden" name="noheader" value="true" />
khi thực hiện xử lý phụ trợ mà cuối cùng dẫn đến chuyển hướng (được khuyến nghị để tránh việc gửi biểu mẫu kép đáng sợ), trong các trường hợp rìa hiếm khi bạn cần truy cập vào các móc wp thường xảy ra sau khi "tiêu đề đã được gửi".