问题描述
我有一个自定义的 post 类型,我想通过 jQuery 访问 – 最好使用 JSON 。
首先是事情。创建返回/echos json 的函数是很容易的,但是如何通过 jquery 访问它。
正如 Mike 在 this question 中写道,他 – 据我所知,他将它放在 wordpress 根目录下。这将使其可访问使用 php 文件名 – 但这是推荐吗?我宁愿把它放在一个插件文件夹中。
我已经尝试阅读 wordpress codex,但是 ajax 调用的方式只是混淆我,因为你发布每个 ajax 调用 admin-ajax.php,即使它不是一个管理页面?
有人可以解决我遇到的问题吗?
/风暴
编辑
我遇到的问题是了解如何在 wordpress 中进行 ajax 调用,以及在哪里放置您的 php 和 js 代码来执行/处理调用。
在另一个我链接的问题中,您创建了将文件放在 wp 根目录中的函数 – 我不想这样做。但是我现在已经学会了如何使用 wp_ajax_(nopriv _)[action],并且可以有效地访问我创建的 json 。剩下的问题是我应该放置 JS 来进行通话。我想将它放在插件 js 文件中,但是由于这是在一个页面中呈现的,而不是在管理站点上,ajaxurl 没有定义,所以我必须使用 php 进行回显。
echo admin_url('admin-ajax.php');
所以问题是我应该如何将这个 PHP 与 javascript 结合起来,然后我如何排队它,看到它不是一个文件或一个脚本。
最佳解决方案
Ajax 处理程序
确实有点混乱,Ajax 处理程序在 wp-admin/
目录中,但是,您可以并且应该将其用于 non-admin 请求。然后,为 wp_ajax_nopriv_[action]
钩子注册一个处理程序,而不是正常的 wp_ajax_[action]
。在这种情况下,您只需遵循 admin-ajax.php
的第一行,因为未登录的用户完成的请求已经离开了第 50 行。
所以注册一个挂钩 wp_ajax_nopriv_get_custom_post_data
的功能,如果您要求 action
参数设置为 get_custom_post_data
admin-ajax.php
,它将被调用。一定要在你的处理程序的最后调用 die()
,否则返回默认的 die(-1)
。并且还注册了 logged-in 版本,wp_ajax_get_custom_post_data
(同样的处理函数,没有问题),因为如果你登录到你的站点,你不会碰到 nopriv
钩子。
Server-side 配置为 Javascript
发送 server-side 配置数据的技巧 (如 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
),然后在请求之后添加一个版本号,以便在更新时跳过浏览器缓存。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。