如何在WordPress中管理AJAX调用和JSON

时间:2010-11-03 作者:Storm

我有一个自定义的post类型,我想通过jQuery访问它,最好使用JSON。

所以首先要做的事。创建一个返回/响应json的函数很容易,但我如何通过jquery访问它呢。

迈克在信中写道this question, 据我所知,他把它放在wordpress的根目录中。这将使它可以使用php文件名访问-但这是推荐的吗?我宁愿把它放在插件文件夹中。

我曾尝试阅读wordpress codex,但ajax调用的处理方式让我感到困惑,因为您正在将每个ajax调用发布到admin ajax。php,即使它不是管理页面?

有人能帮我解决一下问题吗?

/风暴

edit

我遇到的问题是理解如何在wordpress中进行ajax调用,以及在何处放置php和js代码来执行/处理调用。

在我链接到的另一个问题中,您创建了一个函数,将文件放在wp根目录中-我不想这样做。但我现在已经学会了如何使用wp\\uajax\\u(nopriv\\u)[操作],并且可以有效地访问我创建的json。剩下的问题是我应该把JS放在哪里进行调用。我想把它放在插件js文件中,但由于这是在一个页面中显示的,not 在管理站点上,ajaxurl没有定义,所以我必须使用php进行回送。

echo admin_url(\'admin-ajax.php\');
因此,问题变成了我应该如何将这个php与javascript结合起来,以及如何将它排队,因为它不是一个文件或脚本。

1 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

Ajax处理程序在wp-admin/ 目录,但是的,您也可以并且应该将其用于非管理员请求。然后为wp_ajax_nopriv_[action] 钩子,而不是普通的wp_ajax_[action]. 在这种情况下,您只需遵循the first lines of admin-ajax.php, 因为未登录的用户所做的请求将在第50行左右离开页面。

因此,为挂钩注册一个函数wp_ajax_nopriv_get_custom_post_data, 如果你要求admin-ajax.php 使用action 参数设置为get_custom_post_data. 一定要打电话die() 在处理程序末尾,否则默认die(-1) 将返回。并注册登录版本,wp_ajax_get_custom_post_data (对于相同的处理程序函数,没有问题),因为如果您登录到您的站点,您将不会点击nopriv

服务器端配置到Javascript发送服务器端配置数据的技巧(如admin-ajax.php url),是wp_localize_script(). 您向它传递一个键和值数组,这些键和值将包含在页面顶部。这可能最初只是为可本地化的字符串创建的,但您也可以使用它来传递配置数据。

wp_localize_script(\'storm_json_config\', \'storm_config\', array(
    \'ajaxurl\' => admin_url(\'admin-ajax.php\'),
));
storm_json_config 是句柄名称(如果以后要将其出列),storm_config 将包含数据的Javascript对象的名称。因此,静态Javascript文件可以包含一行jQuery.post(storm_config.ajaxurl, ...).

另请参见bueltge\'s answer to a similar question.

插件目录中的静态Javascript要从自己的插件目录中加载静态Javascript文件,请使用wp_enqueue_script(). 看起来像这样:

wp_enqueue_script(\'storm_json\', plugin_dir_url(__FILE__) . \'js/json.js\', array(\'jquery\'), \'20101105\');
在哪里storm_json 再次是句柄名称,然后提供指向文件的链接,然后提供依赖项(可以是null), 然后是一个版本号,该版本号将在请求更新时击败浏览器缓存后添加。

结束