web-dev-qa-db-fra.com

Quel est le meilleur moyen de partager les données des utilisateurs sur plusieurs sites Web Wordpress?

Tout d’abord, le multisite n’est pas ce que je recherche. J'ai 5 sites Web utilisant Wordpress, tous sur des domaines distincts pour lesquels j'aimerais activer les comptes d'utilisateurs. J'ai besoin que les données des utilisateurs soient partagées sur l'ensemble du réseau et lorsqu'un utilisateur crée un compte, il aurait également un accès instantané à tous les autres sites Web. Ce que j'essaie de faire n'est pas recommandé par Wordpress lorsque j'utilise Multisite:

Si vous envisagez de créer des sites fortement interconnectés, partageant des données ou des utilisateurs, un réseau multisite n'est peut-être pas la meilleure solution. - http://codex.wordpress.org/Before_You_Create_A_Network (1er paragraphe, 3ème phrase)

J'ai essayé d'utiliser le "truc de la table des utilisateurs partagés" mentionné ici http://wordpress.org/support/topic/multiple-sites-same-users-how et ici http: // xentek. net/articles/528/implementation-the-wordpress-shared-users-table-trick/ et un certain nombre d'autres endroits ... le problème est que cette information a entre 2 et 7 ans et que j'utilise Wordpress 3.5. .1 et ce "truc" ne semble pas fonctionner.

J'ai essayé d'insérer ce code dans wp-config autour de la ligne $table_prefix.

define('CUSTOM_USER_TABLE', 'wp_users');
define('CUSTOM_USER_META_TABLE', 'wp_usermeta');

Pour résumer, je ne pense pas que cette astuce fonctionne, car je ne parviens pas du tout à me connecter au deuxième site du côté administrateur.

Avez-vous des suggestions sur le meilleur moyen de lier ces données?

9
Ian

Ok, tout d’abord, je me sens idiot, bien que, pour ma défense, la plupart des articles qui parlent de cela ne mentionnent pas un détail crucial dans la réussite de ce travail. La réponse est que vous devez définir l'autorisation pour au moins un administrateur de la base de données. Cette information peut être trouvée dans le Codex ici: http://codex.wordpress.org/Editing_wp-config.php#Custom_User_and_Usermeta_Tables

Après avoir configuré le fichier wp-config.php, il est impératif de modifier le champ wp_capabilities de la table maître usermeta (dans mon cas wp_usermeta) et la colonne meta_value. Faites cela via phpMyAdmin.

Remarque: Faites ceci pour qu'au moins un administrateur utilisateur se connecte. Vous pouvez ajuster tous les autres rôles utilisateurs/administrateurs à partir du backend une fois que vous y êtes entré.

Screenshot of what users permissions will be changed

Pour chaque site Web créé, ce nouveau préfixe doit être attribué au rôle d'utilisateur admin.

Dans mon cas, puisque cela ne fonctionne que sur 2 sites pour le moment, cela ressemble à ceci:

a:1:{s:13:"administrator";s:1:"1";}
tbs_capabilities = a:1:{s:13:"administrator";s:1:"1";}

Screenshot of wp_usermeta value

La première ligne définit les autorisations pour le préfixe de table par défaut (dans ce cas, wp_) et la deuxième ligne, les autorisations pour le deuxième site Web (dans ce cas, avec le préfixe tbs_).

Merci à brasofilo pour le commentaire qui m'a amené à creuser un peu plus loin pour enfin résoudre mon problème!

J'espère que cette réponse pourra aider d'autres personnes ayant le même problème que moi.

8
Ian

Lors du partage de wp_users et de wp_meta, il existe un autre problème. Une autre installation de wordpress reconnaît les utilisateurs, mais ne reconnaît pas les rôles des utilisateurs provenant de l'autre site Web . Le rôle apparaît comme indéfini.

Donc, vous avez édité votre wp-config.php comme requis:

define('CUSTOM_USER_TABLE', 'someprefix_users');
define('CUSTOM_USER_META_TABLE', 'someprefix_usermeta');

Je pense que le moyen le plus simple de le faire, sans bricoler avec la base de données, est d'utiliser les éléments internes de wp. Lors de la connexion, il est possible d’attribuer un rôle. Disons que nous avons besoin du rôle de contributeur pour tout le monde et du rôle d'administrateur pour l'utilisateur 'Superman'.

function check_user_role($user_login, $user) {
  if ( $user_login == 'superman' ) {
     $user->add_role('administrator');
     } else {
     $user->add_role('contributor');
  }
}

// the action fired on login
add_action('wp_login', 'check_user_role', 10, 2);

Ainsi, les utilisateurs provenant du site Web initial se voient attribuer le rôle de "contributeur" lorsqu'ils se connectent.

  • Vous pouvez supprimer la vérification de l'utilisateur après vous être connecté avec l'utilisateur admin.
  • Les utilisateurs peuvent avoir plusieurs rôles, les capacités sont importantes.

http://codex.wordpress.org/Class_Reference/WP_User

2
cenk

Je devais créer une nouvelle ligne:

meta_key='tbs_capabilities' meta_value='a:1:{s:13:"administrator";b:1;}'

et user_id=1. La méthode que vous avez décrite n'a pas fonctionné.

0
James Smith