【问题标题】:Sync all User Roles between two Wordpress Installs sharing the same wp_users and wp_usermeta tables.在共享相同 wp_users 和 wp_usermeta 表的两个 Wordpress 安装之间同步所有用户角色。
【发布时间】:2018-08-23 02:37:32
【问题描述】:

我创建了一个 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 );

当仅向用户分配一个用户角色时,上述解决方案非常有效。但是如果一个用户被分配了多个用户角色,那么它就不起作用了。我的意思是,它不会同步所有用户角色。

在挖掘数据库后,我了解到解决方案在于将“wp_capabilities”的“meta_value”克隆为“wp_new_capabilities”(在 wp_usermeta 中)

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

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

那么需要对上面提到的代码做哪些修改来实现呢?

谢谢!

【问题讨论】:

    标签: php mysql wordpress multisite


    【解决方案1】:

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

    我只是在 "add_action('set_user_role', 'ksu_save_role', 10, 2 );" 中将 'set_user_role' 更改为 'add_user_role'

    小魔法调整后的结束代码

    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”和“YITH Automatic Role Changer for WooCommerce Premium”等角色转换插件兼容

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

    【讨论】:

      猜你喜欢
      • 2019-02-19
      • 1970-01-01
      • 2011-12-28
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-08
      相关资源
      最近更新 更多