当您尝试在 wordpress 插件开发中使用 ajax 技术时,与正常方式有一些不同。 我一直在努力和搜索它很长时间,很难得到一个帖子来说得很清楚。 所以在这里,我试图对其中的所有关键点做出更好的解释。
由于在wordpress后端使用ajax的方式与前端不同,而在后端,它更容易。 我只会做一个关于前端的话题。
在您阅读这篇文章之前,请确保您具有 WordPress 插件开发、ajax、php 等方面的基础知识,这样您就不会浪费时间阅读它而得不到任何帮助。
太好了,让我们开始吧。
要点1
如果您有一个单独的 javaScript 文件,假设该文件是插件文件夹下的 js/your_ajax_script.js,那么您必须确保首先使用 wp_enqueue_script() 包含此脚本。 然后使用 wp_localize_script() 创建一个 ajax_object 供您进一步使用。
add_action( 'wp_enqueue_scripts', array($this, 'enqueue_frontend_script') );
function enqueue_frontend_script(){
wp_enqueue_script( 'ajax-script', PLUGIN_URL . 'js/your-ajax-script.js', array('jquery') );
wp_localize_script( 'ajax-script', 'your_ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
PLUGIN_URL 是引用你的插件 url 的常量,your_ajax_object 是 ajax_object 的名称,你可以随意命名。 array( ‘ajax_url’ => admin_url( ‘admin-ajax.php’ ) 是 your_ajax_object 的属性 ajax_url 的定义。确保 admin_url( ‘admin-ajax.php’ ) 没有拼写错误
要点2
我们先来看脚本。
jQuery(document).ready(function($){
$('.btn_del_row').click(function(){
var id = $(this).data('id');
var confirmalert = confirm("Are you sure ?");
if (confirmalert == true) {
var data = {
'action': 'your_ajax_action',
'id' : id,
};
jQuery.post( your_ajax_object.ajax_url, data, function(response){
alert('Got this from the server: ' + response);
});
}
});
});
在此 javascript 中,确保使用您定义的 ajax_object 及其属性,在我们的例子中是 your_ajax_object.ajax_url。
在发送给动作的数据中,你必须提到动作名称,在我们的例子中是这个气味’action’:’your_ajax_action’,你可以随意命名这个动作名称,但请记住,你必须使用 在需要的地方使用完全相同的名称。 你会看见。
要点3
为登录和登录用户挂钩您的操作功能。
add_action( 'wp_ajax_your_ajax_action', 'your_ajax_action' );
add_action( 'wp_ajax_nopriv_your_ajax_action', 'your_ajax_action' );
function your_ajax_action (){
global $wpdb;
$id = $_POST['id'];
// do something you like ...
echo $result;
wp_die();
}
看看上面的代码,希望你注意到有 5 个地方使用了在你的 javascript 代码中定义的同一个词“your_ajax_action”。 这必须完全相同,否则将无法正常工作。
在 php 函数的末尾,不要忘记使用 wp_die() 关闭它;
在 wordpress 插件中使用 ajax 有点烦人,但希望您在按照我的解释后能够成功完成。