我假设你知道如何编写WordPress插件,现在你想知道如何使用AJAX添加炫酷的功能,这会让你的插件看起来有点酷。
对于我的akWpUploder插件,我也面临着同样的问题。我搜索了一下,但找不到任何有趣的东西,或者应该说,将Ajax添加到我的插件的简单方法。所以我深入研究了WordPress代码库以寻求解决方案,因为WordPress的自动保存功能就是我想要使用的功能之一。
在那里我找到了我真正想要的东西,一种使用Ajax完成任务的非常简单的方法。
问题:在使用AJAX时如何在插件中使用WordPress函数
让我先解释一下这个问题,当我在开发插件时,我需要将照片数据插入到数据库中。要做到这一点,我需要使用wordpress数据库函数,但是按照我所知道的使用ajax的方式(即创建一个单独的php文件来处理ajax请求),这有点困难和混乱。它需要与数据库建立直接连接,或者包括WordPress配置文件。
我对这两个选项都不满意,我需要一个更简单的解决方案。
解决方案:admin-ajax.php和action hook wp_ajax_
正如我前面提到的,我深入WordPress,看看WP是如何使用Ajax来保存帖子的。
我找到的是这个代码。
- default :
- do_action( ‘wp_ajax_’ . $_POST[‘action’] );
- die(‘0’);
所以,现在我需要做的就是将我所有的Ajax请求发送到admin-ajax.php,提供一个‘action’,WordPress将调用附加到该钩子的函数。
很整洁,不是吗?现在我可以让我的插件变得简单了。
实施:示例
你可能会想“没关系,但你能给我举个例子吗?”
好的,我当然会的。
首先我们关注javascript,这里我使用的是jQuery,它是可用的最简单的javascript库。
- 让我们包括jQuery:
- <?php
- echo‘<script src=”‘.get_option(‘siteurl’). ‘/wp-content/plugins/jquery-1.2.3.min.js”> </script>’;
- 现在Ajax请求的代码:它们是需要注意的两件事。
- “action”,它包含与“wp_ajax_”一起使用以创建WordPress挂钩的值。
- 另一个是“cookie”,它包含验证你对admin-ajax.php的管理员访问权限所需的cookie。
- <script>
- $.post(siteurl+“/wp-admin/admin-ajax.php”, {action:“ak_attach”, ‘cookie’: encodeURIComponent(document.cookie)},
- function(str)
- {
- alert(str);
- });
- </script>
至此,事情的javascript部分就结束了。
现在,我们将在插件中处理此请求。
- 因此,首先我们将创建响应Ajax请求的函数。你应该注意到,我在末尾使用了exit ,这是因为我希望脚本在这里结束,否则我的数据将为‘0’。
- <?php
- function ajaxResponse(){
- global $wpdb; global $userdata;
- get_currentuserinfo();
- echo “Hello “. $userdata->user_login;
- exit;
- }
- 现在我们需要将此函数告知WordPress,因此我们将通过在上面的javascript代码中提供action参数,将此函数附加到我们创建的Hook上。
- add_action(‘wp_ajax_ak_attach’, ‘ajaxResponse’);
就这样了,我们完事了。
既然你知道了如何在编写插件时轻松使用Ajax,那就继续使用它吧。下载这个演示插件的代码,它显示了整个操作,并且可以作为模板。
注意:admin-ajax.php只允许管理员用户发布数据,这意味着它只能在WordPress的管理区域使用,不能用于一般场景。