找出目标 URL
在 WordPress 中,所有 AJAX 请求都必须发送到以下 URL:
http://www.example.com/wp-admin/admin-ajax.php
您不应直接向位于插件或主题目录中的文件发出 AJAX 请求。
另外,不要对上面的 URL 进行硬编码,而是应该使用以下函数来构造 URL:
<script>
ajax_url = "<?php echo admin_url('admin-ajax.php'); ?>";
</script>
或者,您可以使用wp_localize_script()
,但这不是必需的,上面也可以。
注意:不要担心“管理员”部分,此 URL 对所有用户(包括未登录(访客)用户)都是正确的。
告诉 WordPress 使用什么函数来处理你的 AJAX 请求
您需要让 WordPress 知道哪个函数应该处理您的 AJAX 请求。
为此,您将创建一个自定义函数,并使用wp_ajax_*
andwp_ajax_nopriv_*
钩子注册它:
add_action('wp_ajax_mycustomfunc', 'mycustomfunc'); // Logged-in users
add_action('wp_ajax_nopriv_mycustomfunc', 'mycustomfunc'); // Guest users
function mycustomfunc() {
$whatever = esc_html($_POST['whatever']);
echo 'It works: '.$whatever;
exit; // This is required to end AJAX requests properly.
}
不要忘记在 AJAX 请求中指定“mycustomfunc”
最后,这是您如何发出正确的 AJAX 请求:
(function ($) {
$(document).ready(function () {
var my_data = {
action: 'mycustomfunc', // This is required so WordPress knows which func to use
whatever: "yes it is" // Post any variables you want here
};
jQuery.post(ajax_url, my_data, function(response) {
alert('Got this from the server: ' + response);
});
});
})(jQuery);
结合这一切
如果您必须将它们全部放入一个文件中,请按照以下步骤操作:
// Register my custom function for AJAX processing
add_action('wp_ajax_mycustomfunc', 'mycustomfunc'); // Logged-in users
add_action('wp_ajax_nopriv_mycustomfunc', 'mycustomfunc'); // Guest users
function mycustomfunc() {
$whatever = esc_html($_POST['whatever']);
echo 'It works: '.$whatever;
exit; // This is required to end AJAX requests properly.
}
// Inline JavaScript
add_action('wp_footer', 'my_inline_js');
function my_inline_js() { ?>
<script>
// Set the "ajax_url" variable available globally
ajax_url = "<?php echo admin_url('admin-ajax.php'); ?>";
// Make your AJAX request on document ready:
(function ($) {
$(document).ready(function () {
var my_data = {
action: 'mycustomfunc', // This is required so WordPress knows which func to use
whatever: "yes it is" // Post any variables you want here
};
$.post(ajax_url, my_data, function(response) { // This will make an AJAX request upon page load
alert('Got this from the server: ' + response);
});
});
})(jQuery);
</script>
<?php
}
注意:对于这ajax_url
部分,您可以使用wp_localize_script()
而不是手动设置它,但它的灵活性较低,因为它需要指定一个您可能没有的现有排队脚本。
注意:另外,为了将内联 JavaScript 手动输出到页面中,使用wp_footer
钩子是正确的。如果使用,wp_localize_script()
那么您将使用wp_enqueue_scripts
钩子代替。