使用现有WP-CLI命令的一种方法是通过WP_CLI::runcommand()
.
下面是两个如何过滤现有WP-CLI命令的示例,即wp user list
命令基于WP_User_Query
而且是pre_user_query
挂钩:
在WP-CLI中运行自定义脚本script.php
使用文件:
<?php
add_action( \'pre_user_query\', \'wpse_pre_user_query\' );
WP_CLI::runcommand(
\'user list --role=customer --orderby=ID --order=asc\',
[ \'launch\' => false ]
);
remove_action( \'pre_user_query\', \'wpse_pre_user_query\' );
/**
* Modify WP_User_Query WHERE part.
*/
function wpse_pre_user_query( $user_query ) {
global $wpdb;
$user_query->query_where .= " AND {$wpdb->users}.ID > 200 ";
}
在当前进程中使用
\'launch\' => false
使当前筛选成为可能。这里我们使用
pre_user_query
如中所述
answer 作者:皮特·尼尔森。
如果需要的话,我们还可以从命令中获取经过解析的json输出来使用它:
$json = WP_CLI::runcommand(
\'user list --role=customer --orderby=ID --order=asc\',
[ \'launch\' => false, \'parse\' => \'json\', \'return\' => true ]
);
然后,我们可以使用以下命令行运行它:
wp eval-file script.php
在WP-CLI中运行自定义命令另一种方法是编写
custom command 具有
WP_CLI::add_command()
支持:
wp user wpse_list_query --gt_user_id=200
命令部分所在的位置
user wpse_list_query
使用
--gt_user_id
参数,仅获取用户ID大于给定值的用户。
这里有一个插件框架:
if ( defined( \'WP_CLI\' ) && WP_CLI ) {
/**
* Custom User List Query Command.
*
* [--gt_user_id=<user_id>]
* : Greater than a given user ID.
*
* @when before_wp_load
*/
$wpse_command_callback = function( $args, $assoc_args ) {
if ( isset ( $assoc_args[\'gt_user_id\'] ) ) {
$uid = $assoc_args[\'gt_user_id\'];
WP_CLI::add_wp_hook(
\'pre_user_query\',
function ( $user_query ) use ( $uid ) {
global $wpdb;
$user_query->query_where .= $wpdb->prepare(
" AND {$wpdb->users}.ID > %d",
$uid
);
},
$priority = 10,
$accepted_args = 1
);
}
WP_CLI::runcommand(
\'user list --role=customer --orderby=ID --order=asc\',
[ \'launch\' => false ]
);
};
WP_CLI::add_command( \'user wpse_list_query\', $wpse_command_callback );
}
请注意,PHPDoc用于定义可选参数以及何时运行。如果我们跳过以下括号:
* [--gt_user_id=<user_id>]
那么参数就不再是可选的了。
希望您可以根据您的需要进一步调整此选项!