如何在不编写插件的情况下将AJAX引入主题?

时间:2010-10-01 作者:keranm

好的,我从wordpress主题中的一些AJAX内容开始

1) 我正在根据主题框架构建一个儿童主题2)我的儿童主题有一个标题。php,索引。php,函数。php和样式。css(现阶段)

在我的标题中。php我有以下内容(顺便说一句:代码改编自http://codex.wordpress.org/AJAX_in_Plugins):

<?php
    if( !is_admin() ) {
 add_action(\'wp_ajax_my_special_action\', \'my_action_callback\');
 add_action(\'wp_ajax_nopriv_my_special_action\', \'my_action_callback\');
 $_ajax = admin_url(\'admin-ajax.php\');    
}
?>
<script type="text/javascript" >
jQuery(document).ready(function($) {

 var data = {
  action: \'my_special_action\',
  whatever: 1234
 };

 jQuery.post(\'<?php echo($_ajax); ?>\', data, function(response) {
  jQuery(\'#output\').html(\'Got this from the server: \' + response);
 });

});
</script>
</head>
好了,这很酷-它会用“从服务器获得:0”更新页面上的输出div

我需要一个名为“my\\u action\\u callback”的PHP函数,所以在我的主题函数中。php我有以下内容:

function my_action_callback() {

 $whatever = $_POST[\'whatever\'];

 $whatever += 10;

    echo \'whatever now equals: \' . $whatever;

 die();
}
这是我的函数中唯一的函数。php

为了确保PHP函数正常工作,我将我的\\u action\\u callback()粘贴到索引中。php-它会按预期输出“whatever now等于:10”。

然而,AJAX响应总是“从服务器得到这个:0”AJAX似乎从未从PHP函数得到响应。

我尝试添加。ajaxError()查看是否有任何错误-没有。

我尝试将PHP函数添加到我的另一个插件中-nope。

我错过了什么,jQuery没有为我做ajax呢?

提前感谢

1 个回复
最合适的回答,由SO网友:John P Bloch 整理而成

放那些add_action 您的functions.php 文件也是。如果他们在header.php, WordPress从不注册它们,因为AJAX中没有加载标题。还有,你不需要这个is_admin() 检查主题的标题永远不会加载到admin中。因此,函数文件应如下所示:

add_action(\'wp_ajax_my_special_action\', \'my_action_callback\');
add_action(\'wp_ajax_nopriv_my_special_action\', \'my_action_callback\');
function my_action_callback() {

 $whatever = $_POST[\'whatever\'];

 $whatever += 10;

    echo \'whatever now equals: \' . $whatever;

 die();
}
主题头文件的这一部分的开头应该如下所示:

<?php
$_ajax = admin_url(\'admin-ajax.php\');
?>
<script type="text/javascript" >
jQuery(document).ready(function($) {
除此之外,您的代码看起来很好!

结束

相关推荐

测试jQuery或Prototype是否由另一个插件排队?

在我的插件中,我想测试jQuery或Prototype(或两者)是否将由另一个插件加载。所以,有wp_enqueue_script(\'jquery\') 或wp_enqueue_script(\'prototype\') 已调用。我在文件中有适合我的插件的代码plugin.prototype.js 和plugin.jquery.js 如果原型已排队,我的插件将使用plugin.prototype.js. 这样我就避免了在站点中加载不必要的内容。如果两者都没有加载,我将排队,以较小者为准。如何测试以查看已