经过一天的努力,我终于找到了解决问题的办法,但我不知道我到底犯了什么错误。请就我的问题给出您宝贵的答案,如果您无法回答,请谦虚地请求不要阻止。
因此,我正在WordPress中尝试Ajax调用,并遇到了一个问题“致命错误:调用C:\\xampp\\htdocs\\brandcart\\wp content\\themes\\twenten\\functions.php中未定义的函数add\\u action(),第51行”
WordPress:4.1.1主题:210
这是我的代码:
在210页中。php
<input type="hidden" name="GreetingAll" id="GreetingAll" value="Hello Everyone!" />
<input type="submit" id="PleasePushMe" />
<div id="test-div1">
</div>
在210个函数中。php
add_action( \'init\', \'add_myjavascript\' );
function add_myjavascript(){
wp_enqueue_script( \'ajax-implementation.js\', get_bloginfo(\'template_directory\') . \'/script/ajax-implementation.js\', array( \'jquery\' ) );
}
// creating Ajax call for WordPress
add_action( \'wp_ajax_nopriv_MyAjaxFunction\', \'MyAjaxFunction22\' );
add_action( \'wp_ajax_MyAjaxFunction\', \'MyAjaxFunction22\' );
function MyAjaxFunction22(){
//get the data from ajax() call
$GreetingAll = $_POST[\'GreetingAll \'];
$results = "<h2>".$GreetingAll."</h2>";
// Return the String
die($results);
}
以及我的ajax实现。js(位于主题的脚本目录中)
jQuery(document).ready(function() {
var GreetingAll = jQuery("#GreetingAll").val();
jQuery("#PleasePushMe").click(function(){ jQuery.ajax({
type: \'POST\',
url: \'http://localhost/brandcart/wp-content/themes/twentyten/functions.php\',
data: {
action: \'MyAjaxFunction\',
GreetingAll: GreetingAll,
},
success: function(data, textStatus, XMLHttpRequest){
jQuery("#test-div1").html(\'\');
jQuery("#test-div1").append(data);
},
error: function(MLHttpRequest, textStatus, errorThrown){
alert(errorThrown);
}
});
});
});
最合适的回答,由SO网友:Tom J Nowell 整理而成
您将AJAX请求发送到错误的位置。当然打电话了functions.php
由于WordPress API不是由functions.php
(反过来)。汽车不会让燃料前进,燃料会让汽车前进,简单的上车不会让燃料神奇地出现,就像装载一样functions.php
不会神奇地让所有WordPress API都出现。
此外,将主题中的文件用作AJAX和表单提交端点也是一个巨大的安全漏洞。即使您更改了主题,这些端点仍然存在,并且仍然可以使用。
因此,请使用官方的ajax端点:
http://codex.wordpress.org/AJAX_in_Plugins
当您将脚本排队时,还要本地化一个变量以将端点的url传递给javascript:
// in JavaScript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
wp_localize_script( \'ajax-script\', \'ajax_object\',
array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) ) );
然后在javascript中,端点将是:
ajax_object.ajax_url
最后一句话,你所有的作品都将在下一次更新的《二十世纪十》中被销毁。不要修改二十个主题,而是创建一个子主题并将修改放在那里。这样,您就可以在不丢失任何更改的情况下更新默认主题