我会从调查set_user_role
行动挂钩。您将向回调函数传递3个参数—用户ID、新用户角色和一组旧用户角色(这对我来说似乎很奇怪,您无法传递一组角色,但很好)。
下面是一个示例代码-我不确定您将如何获得用户拥有的站点,但它应该给您一个大致的想法:
function my_set_user_role_callback( $user_id, $new_role, $old_roles ) {
// Get the user sites here - not sure how you\'d do that, but there should be a way
$user_sites = array();
if ( $user_sites ) {
if ( in_array( \'administrator\', $old_roles ) && $new_role == \'subscriber\' ) {
foreach ( $user_sites as $site ) {
// Archive the site
$site->archived = true;
update_blog_details( $site->userblog_id, (array) $site );
}
} elseif ( in_array( \'subscriber\', $old_roles ) && $new_role == \'administrator\' ) {
foreach ( $user_sites as $site ) {
// Un-archive the site
$site->archived = false;
update_blog_details( $site->userblog_id, (array) $site );
}
}
}
}
add_action( \'set_user_role\', \'my_set_user_role_callback\', 10, 3 );
一旦您了解了如何获取用户站点,请修复
$site
用正确的方法反对(这些方法有可能是正确的,但仍然如此)。
PS:您可以将所有代码放在一个插件中并通过网络激活它,或者将其放在wp内容/mu插件/目录中,以便始终为所有站点启用它。