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

标签 php mysql wordpress multisite

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

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

为此,我尝试了 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”的整个“meta_value”从“wp_capabilities”复制到“wp_new_capabilities”?

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

那么需要对上述代码做哪些更改才能实现这一点?

谢谢!

最佳答案

我在同步用户角色(每个用户多个用户角色)方面遇到了问题。 经过两个多晚上的挑灯夜战,我找到了愚蠢的神奇解决方案:)

我只是在“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”等角色转换器插件兼容

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

关于php - 在共享相同 wp_users 和 wp_usermeta 表的两个 Wordpress 安装之间同步所有用户角色。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49279891/

相关文章:

mysql - 根据同一个表中的另一列更新表中的列

php - plugin_dir_path(__ FILE__)和__DIR__之间的区别

php - 如何在网页中显示随机图片?

java - iOS 推送通知的 PHP 和 Java 字符串长度阿拉伯语文本大小问题

mysql - 为父行设置 id 的触发器

mysql - WordPress 列表结果来自 wp_users 和 wp_usermeta

css - 更改评论 Wordpress 的背景颜色

php - 修改我的代码以使用 delete sql 查询

php - 将数组的内容添加到SQL查询中的where条件中

php - MySQL ("Sending Data"查询非常慢)