我有一个用于维护wordpress插件的命令行脚本,并且必须加载wordpress核心才能访问wordpress函数。
此问题与在实际cron脚本中使用的Initialize WordPress环境非常相似。尽管它与它不同,因为所提到的问题应该与(真实的)cron脚本一起使用,否则可以通过启动命令行php脚本来实现。由于所提到的问题已经回答,并且此答案不能满足我的需求,因此我开始了此问题。
那么在命令行脚本中初始化wordpress环境有什么必要呢?
有关
我有一个用于维护wordpress插件的命令行脚本,并且必须加载wordpress核心才能访问wordpress函数。
此问题与在实际cron脚本中使用的Initialize WordPress环境非常相似。尽管它与它不同,因为所提到的问题应该与(真实的)cron脚本一起使用,否则可以通过启动命令行php脚本来实现。由于所提到的问题已经回答,并且此答案不能满足我的需求,因此我开始了此问题。
那么在命令行脚本中初始化wordpress环境有什么必要呢?
有关
Answers:
我想出了以下解决方案。该脚本必须以以下代码开头。
<?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');
有关
如果您不想处理手动加载WordPress的麻烦过程,则可以使用WP-CLI的eval-file
命令:
wp eval-file my-script.php
该my-script.php
文件可以包含任何WP函数调用。例如:
<?php
global $wpdb;
echo implode( ' ', $wpdb->tables() ) . "\n";
eval-file
使WordPress的所有功能都可用而不需要require
什么?借助此类PHP脚本的快速示例,此答案将更加清楚。
ob_end_clean();
否则您将需要在之后运行,否则wordpress会捕获您的所有输出,直到最后才显示任何内容。