在我的wordpress插件中,我需要一个JSON选项,使用jquery加载有关自定义帖子类型的信息。此jquery调用将出现在所有用户都应该看到它的页面中。
据我所知codex我应该有一个功能:
function my_json_returning_function(){
// get json objects here
echo $json;
die();
}
以及行动:
add_action('wp_ajax_my_json_action', 'my_json_returning_function');
add_action('wp_ajax_nopriv_my_json_action', 'my_json_returning_function');
全部在我的插件文件中。
然后像:
jQuery(document).ready(function($) {
var data = {
action: 'my_json_action',
};
// since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
jQuery.post(<?php echo admin_url('admin-ajax.php');?>, data, function(response) {
alert('Got this from the server: ' + response);
});
});
应该调用有问题的函数。
我真正的问题是我应该把所有不同的部分放在哪里 - 如果缺少某些东西。
php函数和actions钩子进入插件文件。但是javascript我更加困惑。我想把它放在插件javascript文件中,但因为我必须使用php获取管理URL,这成为一个问题。
另外,我如何确保只在特定页面中调用脚本?是否有更多的钩子和过滤器我应该适应?或者是否可以在该页面上执行短代码时使用wp_enqueue_script加载它,或者是迟到,因为我似乎需要在标题中加载它。
很多问题,但我希望你理解我的问题的基础 - 我很难将代码放在wordpress结构的正确位置。
修改 调用echo admin_url('admin-ajax.php');不是,至少在我眼里是最优雅的做法。我宁愿有一个json API,它有一个单独的url,并在ajax调用中调用它。我如何在wordpress中设置只返回json对象的页面?
答案 0 :(得分:1)
上面的内容部分正确。
当使用对admin-ajax.php的调用时,你在wordpress codex页面的评论中有
// since 2.8 ajaxurl is always defined in the admin header
// and points to admin-ajax.php
这就是它...使用javascript变量' ajaxurl '代替php调用..
所以看起来像这样
jQuery(document).ready(function($) {
var data = {
action: 'my_json_action',
};
// since 2.8 ajaxurl
jQuery.post(ajaxurl, data, function(response) {
alert('Got this from the server: ' + response);
});
});
应该是你..只需将所有功能放在主插件文件中。 当wordpress加载时,它会产生一个名为ajaxurl的变量,然后你可以在你的脚本中使用.. :)