2010-11-02 55 views
1

在我的wordpress插件中,我需要有一个JSON选项来加载,使用jquery,关于自定义帖子类型的信息。这个jquery调用将进入一个页面,所有用户都应该看到它。在wordpress中调用json函数

据我从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函数和动作钩子进入插件文件。但是,我更加困惑的JavaScript。我想把它放在插件的JavaScript文件中,但因为我必须使用PHP获取管理网址,这成为一个问题。

另外,如何确保仅在某个页面中调用脚本?是否有更多的钩子和过滤器我应该适应?或者,在该页面上执行简码时,可以使用wp_enqueue_script加载它,或者是后期加载,因为我似乎需要将它加载到标题中。

很多问题,但我希望你能理解我的问题的基础 - 我很难将代码放在wordpress结构的正确位置。

编辑: 调用回波ADMIN_URL( '管理员-ajax.php');至少在我眼中是最优雅的做法。我宁愿有一个json API,以及其独立的url,并在ajax调用中调用它。我将如何去设置一个WordPress的页面,只返回一个JSON对象?

+0

这个问题[已在WordPress的堆栈交换回答](http://wordpress.stackexchange.com/questions/3610 /如何管理的阿贾克斯通话和JSON的功能于WordPress的)。诀窍是您可以使用'wp_localize_script()'将PHP配置值发送给Javascript。 – 2010-11-17 14:41:00

回答

1

你上面有什么是部分正确的。使用呼叫管理-ajax.php时

,你从WordPress抄本页面的评论已是

// 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,然后你可以在你的脚本中使用.. :)

+0

是的,但据我了解,它只会在管理页面上有效,并且这应该在普通页面上供所有人看到。所以ajaxurl不会被定义。 但是,出于好奇,你会在你的例子中将jquery函数放在哪里? – niklasdstrom 2010-11-02 18:57:31

+0

在这个例子中,如果它是我创建的插件,我会将它放在主插件.php页面中,我通常的做法是在我的插件文件夹结构中创建一个名为wp-jquery的新php文件。在这个文件中的PHP将是我对add_action钩子的调用,例如:wp_ajax_MYFUNCTION也使用wp_ajax_nopriv_MYFUNCTION,它允许在前端调用文件,然后在我的主插件.php页面中包含该文件。即:include('inc/wp-jquery.php');在这里发帖可能有助于http://geekpreneur.blogspot.com/2009/06/how-to-use-wpajax-in-wordpress.html – Marty 2010-11-03 11:03:34