复制 meta_key 并更改前缀,然后复制 meta_value [重复]
Posted
技术标签:
【中文标题】复制 meta_key 并更改前缀,然后复制 meta_value [重复]【英文标题】:Duplicate meta_key and change prefix and then copy meta_value [duplicate] 【发布时间】:2018-08-24 16:46:04 【问题描述】:复制meta_key
_capabilities
并将前缀从st_pr59t_capabilities
更改为wp_capabilities
,然后将st_pr59t_capabilities
中的meta_value
复制为wp_capabilities
Take a look at this image: phpmyadmin Image Illustration
我正在创建将由同一组用户访问的 wordpress 网站 SITE 1 (st_pr59t_
) 和 SITE 2 (wp_
)。
我已经成功完成
1) 在站点 1 和站点 2 之间共享用户和用户元数据
2) 在站点 1 和站点 2 之间共享登录 Cookie
到目前为止一切都很好。
现在我不仅要同步用户,还要同步所有用户的用户角色(多个用户角色)。
为此我尝试了solution offered HERE:
function ksu_save_role( $user_id, $role )
$prefix_1 = 'st_pr59t_'; // SITE 1's Table Prefix
$prefix_2 = 'wp_'; // SITE 2's Table Prefix
$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 );
当仅向用户分配一个用户角色时,上述解决方案非常有效。但是如果一个用户被分配了多个用户角色,那么它就不起作用了。我的意思是,它不会同步所有用户角色。
通过数据库挖掘后,我了解到解决方案在于将“st_pr59t_capabilities
”的“meta_value
”克隆为“wp_capabilities
”
有没有办法将“user_id
”的整个“meta_value
”从“st_pr59t__capabilities
”复制到“wp_capabilities
”?
Phpmyadmin Image Illustration
如果我们可以将整个meta_value
从“st_pr59t__capabilities
”复制到“wp_capabilities
”,那么分配给用户的所有用户角色都可以同步。
那么需要对上面提到的代码做哪些修改来实现呢?
【问题讨论】:
【参考方案1】:您可以尝试使用允许克隆用户角色的WPDB 方法,这样:
add_action( 'set_user_role', 'ksu_save_role', 10, 2 );
function ksu_save_role( $user_id, $role )
global $wpdb;
$prefix1 = 'st_pr59t_';
$prefix2 = 'wp_';
## --- USER LEVEL --- ##
$level = get_user_meta( $user_id, $prefix1 . 'user_level', true );
if( $level )
update_user_meta( $user_id, $prefix2 . 'user_level', $level );
## --- USER ROLES --- ##
$caps = $wpdb->get_var( $wpdb->prepare( "
SELECT meta_value FROM $wpdb->prefixusermeta
WHERE meta_key = '$prefix1capabilities' AND user_id = %d
", $user_id ) );
if( $caps )
$wpdb->query( $wpdb->prepare( "
UPDATE $wpdb->prefixusermeta as um SET meta_value = '%s'
WHERE um.user_id = %d AND um.meta_key = '$prefix2capabilities'
", $caps, $user_id ) );
代码进入您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。它也应该适合你……
编辑:正确的方法似乎是使用
add_user_role
钩子来代替......请参阅 OP 的答案。
【讨论】:
感谢您为帮助 @LoicTheAztec 所做的努力。当我尝试设置(更改)单个用户角色时,您的解决方案有效。但是当我尝试更改多个用户角色时,它不起作用。我已经发布了我的问题的解决方案。请看一下。谢谢! @ManjuTalluri 这只是关于钩子......非常有趣! …我也赞成你的回答…以上是关于复制 meta_key 并更改前缀,然后复制 meta_value [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何停止 System.Threading.Timer,然后更改其参数并再次运行? [复制]
如何根据用户角色(尤其是可变产品)显示不同的产品价格? [复制]
如何更改图像源,在 GUI 中显示并在之后运行一些代码? [复制]