在Wordpress插件中使用jQuery post()或load()

时间:2010-10-21 19:35:41

标签: jquery ajax wordpress

我正在开发一个插件,并且有一个快速的问题...我首先将我的插件开发为一个单独的'网页',现在我将它整合(包装)到一个WP插件中。这一切都在WP之前正常运行,现在几乎正常运行,但我遇到了一个有趣的问题。无论如何,对于我的问题......在WP侧边栏中使用jQuery .post()函数是否存在某种问题?我正在尝试做这类事......

 jQuery.post("php/draw_calendar.php",
 {month: currentMonth, year:
 currentYear - 2000, days:
 daysInMonth}, function(data){
      jQuery("#Calender").html(data);
      jQuery( "#eventDialog" ).dialog({ autoOpen: false, resizable: false,
 width: 300, minHeight: 200 });
    jQuery( "#eventDialog" ).bind(
 "dialogopen", function(event, ui) {});
   });

jQuery中的所有内容都可以正常工作,但似乎从文件返回的数据似乎永远不会添加到HTML中,而返回的所有内容都是“这是一个变量”。

我认为这可能需要对jQuery和Wordpress中的路径如何工作做些什么,但我对于该怎么做有点不知所措。我没有在网上看到任何其他信息,所以也许我只是在做一些愚蠢的事情。

感谢。

2 个答案:

答案 0 :(得分:3)

您应该使用WP API( WP Plugin )为 bloginfo() 获取正确的目录... ...类似于:

jQuery.post("<?php bloginfo('wpurl');  ?>/wp-content/plugins/calendar/draw_calendar.php",

布拉德指出你需要使用wpurl。 此外,正如awats所写,您可能只需将WP常量用于插件目录。我不确定它是如何格式化的:

jQuery.post("<?php echo PLUGINDIR;  ?>/calendar/draw_calendar.php",

同样来自 determining plugin and content pages page ,看起来您可以使用plugin_basename();

jQuery.post("<?php echo plugin_basename();  ?>/calendar/draw_calendar.php",

答案 1 :(得分:0)

您的插件是否在管理员端运行?在这种情况下,您可以考虑使用内置的AJAX处理器。所以你可以这样做......

<?php 

   add_action('wp_ajax_update_calender', 'update_calender_callback');

   function update_calender_callback(){
     //perhaps include your calender.php script here
     // and run the operations you need...
   }

  //break the php here in the plugin file and then your js is entered after ?>
<script type="text/javascript">
var calData = {
 month: currentMonth,
 year: currentYear - 2000, 
 days: daysInMonth 
 action: update_calender //notice we send an action here...
}

//The callback function I just copied and pasta from what you had...
jQuery.post('ajaxurl',calData,function(data){
      jQuery("#Calender").html(data);
      jQuery( "#eventDialog" ).dialog({ autoOpen: false, resizable: false,
 width: 300, minHeight: 200 });
    jQuery( "#eventDialog" ).bind(
 "dialogopen", function(event, ui) {});
   })
</script>   

http://codex.wordpress.org/AJAX_in_Plugins

或者对于一个不太优雅的,所有js解决方案,你可以试试......

jQuery.post(location.protocol+"//"+location.hostname+"/wp-content/plugins/yourpluginname/scriptname", data, function...