問題描述
我有一個用於維護 wordpress 外掛的命令列指令碼,並且必須載入 wordpress 核心才能訪問 wordpress 函式。
這個問題與 Initialize WordPress environment to use in a real cron script 非常相似。雖然它與它不同,因為引用的問題應該用於 (真實的)cron 指令碼,否則可以透過啟動命令列 php 指令碼來完成。由於提及的問題已經回答了,這個答案並不滿足我的需要,我開始了這個問題。
那麼在命令列指令碼中需要初始化 wordpress 環境呢?
有關
最佳解決方案
我想出了以下解決方案。指令碼必須從以下程式碼開始。
<?php
if( php_sapi_name() !== 'cli' ) {
die("Meant to be run from command line");
}
function find_wordpress_base_path() {
$dir = dirname(__FILE__);
do {
//it is possible to check for other files here
if( file_exists($dir."/wp-config.php") ) {
return $dir;
}
} while( $dir = realpath("$dir/..") );
return null;
}
define( 'BASE_PATH', find_wordpress_base_path()."/" );
define('WP_USE_THEMES', false);
global $wp, $wp_query, $wp_the_query, $wp_rewrite, $wp_did_header;
require(BASE_PATH . 'wp-load.php');
有關
-
How to determine wordpress base path when wordpress core is not loaded
-
http://stackoverflow.com/questions/9101503/include-wordpress-core-into-own-scripts
次佳解決方案
我們還需要在 WP-CLI 中執行此操作。為了正確處理所有的邊情況,例如不正確的資料庫憑據,我們最終滾動了我們自己的 wp-settings.php 檔案版本:
https://github.com/wp-cli/wp-cli/blob/master/php/wp-settings-cli.php
好訊息是,如果您不想要,您不必處理載入 WordPress 的凌亂過程。您可以使用 WP-CLI 的 eval-file 命令:
wp eval-file my-script.php
my-script.php 檔案可以包含任何 WP 函式呼叫。例如:
<?php
global $wpdb;
echo implode( ' ', $wpdb->tables() ) . "n";
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。