2012-07-15 180 views
0

我正在開發一個WordPress插件,並且遇到了一個小小的障礙。我正在研究與PayPal的IPN交互的腳本的一部分。我有一個位於插件目錄中的ipn.php文件,該文件收集來自PayPal的響應並驗證所有交易詳情。 這部分工作正常,但第二部分是我必須將變量插入WordPress數據庫以標記購買成功。 由於$ wpdb在ipn.php文件中不可用,我必須將數據傳遞給插件的核心進行處理。將PHP變量從一個插件文件傳遞給另一個WordPress

我很樂意爲此提供其他解決方案,非常感謝您的幫助。謝謝!

下面是一個例子,這個文件將被用於$ .load()來填充區域在管理面板

<?php 
    global $wpdb; 
    $promos = $wpdb->get_results("SELECT * FROM ". $wpdb->prefix ."voltbam_promocodes"); 

    foreach($promos as $promo){ 
     ?> 
      ID: <?php echo $promo->id ?><br /> 
      Name: <?php echo $promo->name ?><br /> 
      Value: <?php echo $promo->value ?><br /> 
      Type: <?php echo $promo->type ?><br /><br /> 

     <? 
    } 

?> 

這裏是輸出

Fatal error: Call to a member function get_results() on a non-object in (filename) on  line 3 
+0

不知道,但它聽起來像你正在做出一些不正確的假設。你是什​​麼意思*由於$ wpdb在ipn.php文件中不可用,... * ??我的理解是,'$ wpdb'在wordpress中是全局的,這意味着爲了在函數中使用它,您只需要在函數頂部插入語句'global $ wpdb;'。對?當然,只有在初始化後才需要引用該變量,但這不應該成爲問題。這個問題的真正標題應該是:「我如何在插件中修改WP數據庫?」要做到這一點,請參考全局'$ wpdb'。 – Cheeso 2012-07-15 03:11:23

+0

這似乎並沒有工作。我將用我正在使用的代碼和輸出來更新我的文章。 – 2012-07-15 03:42:44

+0

這聽起來像是他設置了PayPal來爲IPN處理調用'ipn.php',所以即使該文件位於插件目錄中,也不會通過WordPress進行。這就是爲什麼$ wpdb不可用。 – 2012-07-15 14:19:33

回答

1

需要../../../wp-load.php將帶來WordPress的核心,並讓您訪問$ wpdb全局。這通常是三個以上的目錄,但如果您的腳本位於更遠的子目錄中,則可能更多。

如果您正在使用多站點安裝,請確保$ _SERVER ['HTTP_HOST']與需要訪問的WordPress站點的URL匹配,然後才需要wp-load.php。

+0

我可以確定我的插件將始終在所有安裝的相同位置嗎?我還沒有實施wordpress多站點支持。 – 2012-07-15 06:35:46

+0

無論是否爲多站點,WordPress插件目錄始終與安裝的其餘部分位於相同的位置。 – 2012-07-15 13:50:41

-3

要麼提交你的阿賈克斯請求wp-admin/admin-ajax.phpinclude 'wp-load.php';我個人建議admin-ajax.php。見AJAX in Plugins

+0

他沒有進行AJAX調用。他告訴PayPal當他們有即時付款通知消息時打開一個特定的URL。 我不認爲你真的想讓他們在你的WordPress設置中調用一些東西。 – 2012-07-15 14:22:08

+0

該OP明確聲明他使用'$ .load()' – Rob 2012-07-15 19:49:56

1

在我自己的設置中,所有的IPN處理代碼都在我的插件中。我有一個短代碼,在需要時調用它。

我創建了一個自定義頁面模板,除了基本的後循環外幾乎所有的東西都被剝離了。這個頁面從不顯示給用戶,所以沒有一個面向顯示的東西很重要。然後,我根據該模板創建了一個名爲'ipnhandler'的頁面,只用簡碼作爲內容。

我把這個頁面設置爲帶有PayPal的IPN處理程序。因爲它是一個常規頁面,所以沒有鏈接到WordPress文件夾或類似的東西。就在:

http://www.mysite.com/ipnhandler

當貝寶調用此頁面,WordPress的看到簡碼,並調用我的插件,它確實需要的IPN處理。

+0

這是一個非常酷的想法。如果我可以標記多個答案,我也會標記這個答案。 – 2012-07-15 15:18:58

+0

我對Stackoverflow很新,所以我不知道如果你可以改變你的「最佳答案」選擇,但你**可以**點擊向上箭頭! ; ^) – 2012-07-15 15:32:02

+0

從技術上講,對我來說這不是「最好」的答案,因爲我已經寫了很多它,所以我對它進行了投票,並將在未來的項目中記住它。謝謝你的幫助! – 2012-07-15 19:30:12

相關問題