Skip to content

Instantly share code, notes, and snippets.

@carlodaniele
Last active December 11, 2023 15:34
Show Gist options
  • Star 20 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save carlodaniele/dcaa60b3cf6145e7f242efea24a2d9f9 to your computer and use it in GitHub Desktop.
Save carlodaniele/dcaa60b3cf6145e7f242efea24a2d9f9 to your computer and use it in GitHub Desktop.
A plugin to share users and usermeta tables between independent WordPress installations. This plugin requires CUSTOM_USER_TABLE and CUSTOM_USER_META_TABLE defined into wp-config file
<?php
/**
* @package Kinsta_Share_Users
* @version 1.0
*/
/*
Plugin Name: Kinsta Share Users
Plugin URI: http://wordpress.org/extend/plugins/#
Description: This is an example plugin for Kinsta blog readers
Author: Carlo Daniele
Version: 1.0
Author URI: http://carlodaniele.it/en/
*/
/**
* Duplicate {$pref}_capabilities and {$pref}_user_level rows in {$pref}_usermeta table
*
* @param int $user_id The user ID.
* @param string $role The new role.
* @param array $old_roles An array of the user's previous roles.
*
* @link https://developer.wordpress.org/reference/hooks/set_user_role/
* @link https://codex.wordpress.org/Plugin_API/Action_Reference/set_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( 'set_user_role', 'ksu_save_role', 10, 2 );
@rosshaydock
Copy link

Hi,

I have implemented this on my wordpress sites and would like to know if there is any way that i can now setup a single sign on between two wordpress sites on the same domain which are not multisite. Do you know if this is possible and if so how.

Thanks,
Ross

@tosinamuda
Copy link

@eorama
Copy link

eorama commented Sep 18, 2020

When there are more than two sites to connect, an "or" is performed within the "If"
Ejm:
if ( $caps ){ update_user_meta( $user_id, $prefix_2 . 'capabilities', $caps ); "or" update_user_meta( $user_id, $prefix_3 . 'capabilities', $caps ); "or" update_user_meta( $user_id, $prefix_4 . 'capabilities', $caps ); }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment