问题描述
我有一个用于维护 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。