簡體   English   中英

WordPress插件:如何解決“對未定義函數add_action()和add_action()的調用”?

[英]WordPress Plugin: How to resolve “Call to undefined function add_action() as well as add_action()”?

Fatal error: Call to undefined function add_action() in D:\xampp\htdocs\excel\wp-content\plugins\DatabaseToExcel\download.php on line 13

我正在創建一個插件以將數據庫表導出到Excel工作表。 主要是我的插件中有兩個文件,我正在發送一個后發請求,要求下載具有表名的download.php文件。 我想確保已登錄admin的download.php文件,但是當我調用任何WordPress Core函數時,發生致命錯誤。 我包括wp-load.php和其他類似的文件-

require_once('../../../wp-load.php');
require_once('../../../wp-config.php');
require_once('../../../wp-includes/load.php');

在這種情況下,auth_redirect()之類的功能可以正常工作而不會出現任何錯誤。 但我想將此插件上傳到www.wordpress.org。

他們說使用這種方法包含文件不是很好,我們不能批准它,因為另一個WordPress安裝中的文件結構可能會有所不同,在這種情況下將無法使用。

這是wordpress.org-的回復

在download.php中,該方式仍然不受保護

require_once('../../../wp-load.php');
require_once('../../../wp-config.php');
require_once('../../../wp-includes/load.php');

包括wp-config.php,wp-blog-header.php,wp-load.php或幾乎所有您必須直接通過include調用的其他WordPress核心文件都不是一個好主意,我們無法批准該插件除非有充分的理由來加載文件,否則請這樣做。 由於並非所有WordPress安裝都具有完全相同的文件結構,因此很容易失敗。

通常,插件將包括wp-config.php或wp-load.php,以獲取對WordPress核心功能的訪問權限,但是有更好的方法來執行此操作。 最好將處理功能(需要但無法訪問核心功能的處理功能)綁定到動作掛鈎中,例如“ init”或“ admin_init”。

請參考插件API參考以獲取更多信息: http : //codex.wordpress.org/Plugin_API

對於其他可能性,或者為了更好地理解我們為什么不允許這樣做,請閱讀以下內容: http : //ottopress.com/2010/dont-include-wp-load-please/

如果您由於需要訪問WordPress之外的WordPress功能而嘗試使用它,那么實際上我們寧願您根本不這樣做。 您的插件應位於WordPress內,如果需要這種訪問權限,則只有已登錄並獲得授權的人員才能訪問。 插件的頁面應像其他所有設置面板一樣通過儀表板調用,這樣,它們將始終可以訪問WordPress函數。

這是我的第一個WordPress插件,經過數小時的努力和閱讀所有這些插件,我沒有解決方案。

加載WP文件后,包括您的download.php文件。 這是放置在插件主文件(或加載程序)中的代碼示例:

add_action('wp_loaded', 'pluginPrefix_include_download_script');
function pluginPrefix_include_download_script() {
  require('download.php');
}

如果您需要更早加載此文件,則還可以使用其他操作,例如admin_init 您還可以使用plugin_dir_path(__FILE__)指定文件的路徑,這將返回您插件目錄的路徑,您可以像這樣使用它:

function pluginPrefix_include_download_script() {
  $pluginDirPath = plugin_dir_path(__FILE__);
  require($pluginDirPath.'download.php');
}

如果您的download.php位於子文件夾(例如,inc /)中,則可能會變得很方便。 在這種情況下,您的include函數可能如下所示:

require($pluginDirPath.'inc/download.php')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM