我知道这很古老,但如果其他人偶然发现这一点,它会有所帮助。。。
我通常会在前端表单中设置某种标志,表示传入的请求是ajax。
<input type="hidden" id="my_ajax_flag" name="my_ajax_flag" value="false" />
最初将其设置为“false”,然后在开始处理ajax时将其切换为“true”。
$(\'#my_ajax_flag\').val(\'true\'); // example using jQuery
然后在代码的管理端,我检查该参数,然后要么包含ajax挂钩,要么执行常规的非ajax管理内容。例如:
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
}
根据您需要做什么,这个想法有多种变体,但它允许您在执行ajax请求时防止常规管理代码的干扰或触发。
另一个方便的建议是在表单中设置WordPress的“noheader”属性。
<input type="hidden" name="noheader" value="true" />
当进行最终导致重定向的后端处理时(建议避免可怕的双表单提交),在极少数情况下,您需要访问通常在“headers ready sent”之后出现的wp挂钩。