WP CLI-显示ID大于给定ID的用户

时间:2019-02-21 作者:rok

下面的代码实现了给定ID=200所需的功能。

    wp user list --role=\'customer\' --orderby=ID --order=asc | awk \'FNR == 1 
{next} $1>200 {print ;}\'
如何使用wp user listWP User Query?

1 个回复
最合适的回答,由SO网友:birgire 整理而成

使用现有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>]
那么参数就不再是可选的了。

希望您可以根据您的需要进一步调整此选项!

相关推荐

WP-CLI:对于开发,我如何激活本地磁盘上但没有压缩的主题?

我正在开发一个WP主题,我将其称为foobar 为了这个问题。它位于/var/www/html/wp-content/themes/foobar. 目前,我正在通过wp-admin 网页和更改在我保存相应文件后立即生效,这是所需的行为。现在,我想使用wp-cli 激活我的主题以优化部署。然而,到目前为止,我还无法做到这一点:$ wp theme activate foobar Error: Stylesheet is missing. 这令人困惑,因为样式表确实存在:$ file /v