AJAX调用中的WordPress Add_action()问题

时间:2015-03-13 作者:sohan

经过一天的努力,我终于找到了解决问题的办法,但我不知道我到底犯了什么错误。请就我的问题给出您宝贵的答案,如果您无法回答,请谦虚地请求不要阻止。

因此,我正在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);
  }
  });
  });

});

1 个回复
最合适的回答,由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
最后一句话,你所有的作品都将在下一次更新的《二十世纪十》中被销毁。不要修改二十个主题,而是创建一个子主题并将修改放在那里。这样,您就可以在不丢失任何更改的情况下更新默认主题

结束