So this happened at work today, was working on a multiste and the client required that under a certain condition. For now lets say the condition is that I’m subscribing to the site and for 5 days i’m a free user on the 5th day i need the client to revert to role => unpaid.
In my functions.php file i have this code
function mysite_sync_site_roles($user_id = NULL)
{
// is_multisite() used just as precaution, this code is meant to Multisite only
if( !is_multisite())
return;
// Initial data
$user_info = get_userdata( $user_id );
if(in_array('administrator', $user_info->roles))
return;
$blogs = get_blogs_of_user( $user_id );
$original_blog_id = get_current_blog_id();
// Iterate through blogs of user
foreach ( $blogs as $blog ){
// Work with another site
switch_to_blog( $blog->userblog_id );
// Grab all user info and update role as in main site
$id = wp_update_user( array ( 'ID' => $user_id, 'role' => 'unpaid' ) ) ;
$var .= $blog->userblog_id."::".$id;
restore_current_blog();
}
$var .="if nothing before this error";
// Back to original main site
switch_to_blog( $original_blog_id );
// make sure current site role is changed
$id = wp_update_user( array ( 'ID' => $user_id, 'role' => 'unpaid' ) ) ;
$var .= "\n for current site".$id;
$handle = fopen("sync.txt", "w+");
fwrite($handle,$var);
fclose($handle);
}
Note: first of all you’ll need a role called unpaid to be registered across the multisite.
function social_roles(){
add_role( 'unpaid', __( 'Unpaid','twentythirteen' ), array(
'read' => false,
'edit_posts' => false,
'delete_posts' => false
) );
add_role( 'trial', __( 'Trial','twentythirteen' ), array(
'read' => false,
'edit_posts' => false,
'delete_posts' => false
) );
}











Leave a Reply