2012-03-16 64 views
2

當使用Ajax(在我的Wordpress主題中)調用PHP頁面時,PHP echo 'Hello World!';工作正常,但調用其他Wordpress PHP函數(如get_bloginfo();),該函數返回undefined。是否有可能在Ajax調用中使用Wordpress函數?有什麼其他的選擇..我知道iframes可以工作。我試圖加載一個輸出插件功能的頁面。Wordpress; Ajax請求中的PHP函數不起作用。另類?

彈出的錯誤是{致命錯誤:調用未定義功能get_bloginfo()在...}

+0

這聽起來不錯。只要你在WP環境中,這些功能就應該可以工作...... – elclanrs 2012-03-16 05:08:39

+0

以下是關於@elclanrs的問題,你有沒有可能提到Wordpress以外的腳本? – rjz 2012-03-16 05:11:48

+0

該腳本是我正在構建的主題的插件腳本。因此,在頁面中,我使用錨鏈接(使用ajax插件類)調用另一個頁面(使用get_header和get_footer ... – user1273237 2012-03-16 05:14:57

回答

0

WP命令狀get_bloginfo()應該是工作。

你確定你已經包含了所有適當的WordPress的標題(在響應腳本)?

+0

是的,普通的echo會顯示輸出,但似乎當回到wordpress內置函數時,輸出錯誤 – user1273237 2012-03-16 05:36:25

+0

好吧,一個「常規」回聲'「會顯示在任何PHP腳本中。是否有類似'<?php require('/ the/path/to/your/wp-blog-header.php'); ?>在你的PHP腳本的頂部? – 2012-03-16 05:38:27

+0

爲什麼需要在這裏使用?我正在使用ajax來獲取文件。 – user1273237 2012-03-16 05:44:16

1

實際上,您需要在WordPress中進行Ajax調用。 [編輯:我的意思是,有一個規定的方式;是否需要虔誠地遵循它,或者是否有其他方法來剝皮貓是另一個故事]有許多教程(只需做一個「Ajax WordPress」的網絡搜索並查找討論實現的文章,而不是現在Ajax就是用於驅動它的後端)。

簡短的版本是:

你應該讓你的電話給特定的處理程序,爲「admin-ajax.php」,你應該用POST做到這一點。你傳遞一個類似於'action = someaction & parameter = foo'的數據對象。

然後,你應該在「someaction」動作的functions.php中有一個鉤子。

還有更多,但我不認爲這是教程的最佳場所。可以說,你需要深入研究;你不能只按照直接標記+ JavaScript頁面的方式進行Ajax調用。

但它可以做到。 WP中的聯繫人表單通常基於Ajax,因此他們可能有示例代碼值得研究。

2

我沒有測試它,嘗試一些東西像下面使用插件

<?php 
/** 
* Plugin Name: Blog information 
* Plugin URI: http://www.test.com/ 
* Description: Displays Blog information 
* Version: 1.0 
* Author: your_name 
* Author URI: http://www.test.com/ 
*/ 
// Function for handling AJAX requests 
function getblog_request_handler() { 

    // Check that all parameters have been passed 
    if ((isset($_REQUEST['request']) && ($_REQUEST['request'] == 'getblog_Action'))) { 
     // Output the response from your call and exit 
     echo get_bloginfo(); 
     exit(); 
    } 
    elseif (isset($_REQUEST['request']) && ($_REQUEST['request'] == 'getblog_Action')) { 
     // Otherwise display an error and exit the call 
     echo "Error: Unable to display request."; 
     exit(); 
    } 

} 

// Add the handler to init() 
add_action('init', 'getblog_request_handler'); 

?> 

而且使用JS調用插件功能得到響應,

.... 

     jQuery.ajax({ 
      type : "POST", 
      url  : "index.php", 
      data : { 
         request : "getblog_Action" 
         }, 
      success : function(response) { 
            alert(response); 
       //jQuery(".blog_name").html(response); 
          } 
     }); 
.... 

當過你調用這個AJAX,你將使用ajax獲取博客信息。

+0

謝謝你的迴應和真棒代碼,但包括wp-load.php做到了。 – user1273237 2012-03-16 06:50:30

+0

什麼是更好的解決方案?這工作。 – user1273237 2012-03-16 07:20:07

+0

@ user1273237你用上面的插件試過了嗎?我認爲你可以按照這種方式在wordpress中進行ajax調用。 – mymotherland 2012-03-16 07:31:24