同步两个Wordpress安装之间的所有用户角色,共享相同的wp_users和wp_usermeta表。

时间:2018-03-14 14:08:28

标签: php mysql wordpress multisite

我创建了一个Woocommerce商店(数据库前缀wp_)和一个共享相同用户的Wordpress博客(数据库前缀wp_new_)(共享相同的wp_users和wp_user_meta表)。

我不仅要同步所有用户的用户,还要同步用户角色(多个用户角色)。

为此,我尝试了https://kinsta.com/blog/share-logins-wordpress/

提供的解决方案
    function ksu_save_role( $user_id, $role ) {

        $prefix_1 = 'wp_'; 
        $prefix_2 = 'wp_new_'; 

        $caps = get_user_meta( $user_id, $prefix_1 . 'capabilities', true );
        $level = get_user_meta( $user_id, $prefix_1 . 'user_level', true );

        if ( $caps ){
            update_user_meta( $user_id, $prefix_2 . 'capabilities', $caps );
        }

        if ( $level ){
            update_user_meta( $user_id, $prefix_2 . 'user_level', $level );
        }
    }
add_action( 'set_user_role', 'ksu_save_role', 10, 2 );

当仅为用户分配单个用户角色时,上述解决方案很有效。但是,如果为用户分配了多个用户角色,则它不起作用。我的意思是,它不会同步所有用户角色。

在挖掘数据库后,我明白解决方案在于克隆" meta_value" " wp_capabilities"到" wp_new_capabilities" (在wp_usermeta中)

有没有办法将'user_id'的整个'meta_value'从“wp_capabilities”复制到“wp_new_capabilities”?

如果我们可以将整个meta_value从“wp_capabilities”复制到“wp_new_capabilities”,则可以同步分配给用户的所有用户角色。

那么需要对上面提到的代码做些什么改变呢?

谢谢!

1 个答案:

答案 0 :(得分:1)

我遇到了同步用户角色的问题(每个用户有多个用户角色)。 在燃烧了午夜油两个多夜后,我找到了愚蠢的神奇解决方案:)

我只是更改了' set_user_role'到' add_user_role'在" add_action(' set_user_role',' ksu_save_role',10,2);"

小魔法调整后的结束代码

function ksu_save_role( $user_id, $role ) {

    // Site 1
    // Change value if needed
    $prefix_1 = 'first_';

    // Site 2 prefix
    // Change value if needed
    $prefix_2 = 'second_';

    $caps = get_user_meta( $user_id, $prefix_1 . 'capabilities', true );
    $level = get_user_meta( $user_id, $prefix_1 . 'user_level', true );

    if ( $caps ){
        update_user_meta( $user_id, $prefix_2 . 'capabilities', $caps );
    }

    if ( $level ){
        update_user_meta( $user_id, $prefix_2 . 'user_level', $level );
    }
}

add_action( 'add_user_role', 'ksu_save_role', 10, 2 ); // THE MAGIC MODIFICATION

代码信用:https://kinsta.com/blog/share-logins-wordpress/

将它添加到functions.php中,你很高兴。

它与角色转换器插件兼容,例如" Woocommerce Subscriptions"和#34; YITH WooCommerce Premium"

的自动角色转换器

您可以根据需要设置和更改任意数量的角色。