在网络内将用户从一个站点批量移动到另一个站点(多站点)

时间:2011-08-11 作者:Tom J Nowell

我有一个多站点安装与2个站点。我在A站点工作,B站点有很多用户。

我可以单独将用户从B移动到A,但用户数量非常多,这可能需要几天的重复工作。

如何将所有用户从站点B移动到站点A?

2 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

以下是我编写的代码,用于在网络中自动将用户从站点A移动到站点B。可能需要运行两次

<?php

add_action( \'admin_init\', \'user_move_init\' );
add_action( \'admin_menu\', \'user_move_add_page\' );

/**
 * Init plugin options to white list our options
 */
function user_move_init(){
    register_setting( \'user_move\', \'user_move\', \'user_move_validate\' );
}

/**
 * Load up the menu page
 */
function user_move_add_page() {
    add_users_page( __( \'User Import\', \'user_move\' ), __( \'User Import\', \'user_move\' ), \'edit_theme_options\', \'theme_options\', \'user_move_do_page\' );
}

/**
 * Create the options page
 */
function user_move_do_page() {

    if ( ! isset( $_REQUEST[\'settings-updated\'] ) )
        $_REQUEST[\'settings-updated\'] = false;

    ?>

    <div class="wrap">
        <h2><?php echo __( \' User Network Import\', \'user_move\' ) ; ?></h2>

        <?php if ( false !== $_REQUEST[\'settings-updated\'] ) : ?>
            <p>Starting transfer</p><?php
            global $wpdb;
            switch_to_blog(2);

            $aUsersID = $wpdb->get_col( $wpdb->prepare("SELECT $wpdb->users.ID FROM $wpdb->users" ));
            /*
            Once we have the IDs we loop through them with a Foreach statement.
            */
            foreach ( $aUsersID as $iUserID ) :
                /*
                We use get_userdata() function with each ID.
                */
                $user = get_userdata( $iUserID );

                $capabilities = $user->{$wpdb->prefix . \'capabilities\'};
                if(!empty($capabilities)){

                    if ( !isset( $wp_roles ) ){
                        $wp_roles = new WP_Roles();
                    }
                    $r = \'\';
                    foreach ( $wp_roles->role_names as $role => $name ) :
                        if ( array_key_exists( $role, $capabilities ) ){
                            $r = $role;
                            break;
                        }

                    endforeach;
                }
                if(empty($r)){
                    $r = \'subscriber\';
                }

                /*
                Here we finally print the details wanted.
                Check the description of the database tables linked above to see
                all the fields you can retrieve.
                To echo a property simply call it with $user->name_of_the_column.
                In this example I print the first and last name.
                */
                echo \'<li>Transfering \'.$user->user_login.\' (\'. ucwords( strtolower( $user->first_name . \' \' . $user->last_name ) ) . \'), \'.$r.\'</li>\';

                add_user_to_blog(1,$iUserID,$r);

                /*
                 The strtolower and ucwords part is to be sure
                 the full names will all be capitalized.
                */
            endforeach;

            restore_current_blog();

            ?><p>Transfer complete</p>

        <?php endif; ?>

        <form method="post" action="options.php">
            <?php settings_fields( \'user_move\' ); ?>
            <p>Click to import Users from the blog site to the main site</p>
            <p class="submit">
                <input type="submit" class="button-primary" value="<?php _e( \'Start Import\', \'user_move\' ); ?>" />
            </p>
        </form>
    </div>
    <?php
}

/**
 * Sanitize and validate input. Accepts an array, return a sanitized array.
 */
function user_move_validate( $input ) {
    return $input;
}

SO网友:Scott

blog post 演示如何将用户从一个站点移动到存在于多站点上的博客中。只要稍加修改,您就可以在多站点博客和多站点博客之间实现这一点。

结束

相关推荐

使用WordPress MultiSite管理多个项目?

我目前在大多数项目中使用WordPress,我管理它们的方式是在本地环境中为每个项目创建一个文件夹,每个文件夹都包含一个WP安装,这有时会使其成为维护、升级的工具,并占用更多空间。我正在查看WP Multisite,我想知道是否可以使用它创建多个具有相同WP安装的项目,但遇到了一个问题,当我使用当前方法完成一个项目时,我只需向我的客户发送一个数据库的SQL转储,告诉他们替换URL并将所有文件/文件夹安装到他的服务器上,效果很好。但是WP Multisite创建了一个独特的文件夹和数据库结构,这使得它很难做