2010-10-21 62 views
0

我正在開發一個插件,並有一個快速問題......我首先將我的插件作爲單獨的「網頁」開發,現在將它集成(包裝) WP插件。它在WP之前都能夠正常工作,並且現在幾乎可以正常工作,但我遇到了一個有趣的問題。無論如何,對於我的問題...在WP側欄內使用jQuery .post()函數有什麼問題嗎?我試圖做這種類型的事情......在jQuery的在Wordpress插件中使用jQuery post()或load()

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) {}); 
    }); 

一切工作正常,除了它似乎從文件返回的數據永遠不會加入HTML和所有被返回是「這是一個變量'。

我認爲這可能不得不做一些與路徑可能在jQuery和Wordpress中工作,但我在做什麼有點損失。我在網上沒有看到任何其他信息,所以也許我只是在做一些愚蠢的事情。

謝謝。布拉德指出,你需要使用wpurl

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

+0

好吧,我想通了的一部分解決方案......只是爲了帶來另一個問題。如果我在絕對路徑編碼,這工作正常......即。 'http:// localhost:8888/wordpress/wp-content/plugins/swamped-event-calendar/js /'或類似的東西。顯然,這是做這件事的可怕方式。所以,我的問題歸結爲我可能如何在這裏使用相對路徑。在wordpress中的jQuery顯然不使用類似於CSS的引用,其中當前目錄是CSS文件路徑本身。任何信息,將不勝感激! – Ryan 2010-10-21 19:43:39

+0

你可以嘗試使用/之前的路徑像 - >「/php/draw_calendar.php」? /表示來自當前路徑的相對... – Mulki 2010-10-21 19:51:03

+0

這是我嘗試的第一件事。它沒有工作。我可以調用像/ wordpress/wp-content/plugins/swamped-event-calendar這樣的相對路徑,但那絕對不是我認爲的絕對路徑。因爲它會將插件名稱硬編碼到源代碼中。 – Ryan 2010-10-21 19:56:16

回答

3

你應該與WP API(bloginfo())獲取爲您WP Plugin正確的目錄...像。 另外,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", 
+0

我相信你實際上需要'bloginfo('wpurl')',因爲'bloginfo('url')'不會正確,如果用戶的wordpress安裝位置與他們的站點地址不一樣(可以在WordPress的管理面板)。另外,您需要/ plugins /後的插件名稱。當然,如果你使用PHP來輸出JavaScript,你只能這樣做。 – 2010-10-21 20:01:56

+0

不是什麼大問題,但是插件目錄「PLUGINDIR」還有一個wordpress的PHP常量。 http://striderweb.com/nerdaphernalia/2008/08/wordpress-constants/ – awats 2010-10-21 20:02:56

+0

我給了一個去......無論出於何種原因「/ wordpress/wp-content/plugins/swamped-event-calendar/js/test。 php「的作品和」<?php bloginfo('url');?>/wp-content/plugins/draw_calendar.php「沒有。從js文件中調用PHP有沒有問題?我問,因爲使用wordpress中的WP_PLUGIN_URL變量也很方便。編輯:正如布拉德指出,我不能這樣做,因爲我的JS本身是一個文件,而不是由PHP輸出。 – Ryan 2010-10-21 20:07:31

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... 
+0

這個插件實際上作爲前向側邊欄上的一個小部件。 AJAX調用會從數據庫中提取所需的數據。這將太大,拉整個表,所以小部件只會根據用戶的需要(這不會經常更改)拉入數據。 – Ryan 2010-10-21 22:37:06

+0

在這種情況下,請在最後一行嘗試js。希望這是訣竅。 jQuery.post(location.protocol +「//」+ location.hostname +「/ wp-content/plugins/yourpluginname/scriptname」,data,function ... – awats 2010-10-22 00:24:19