Quelle est la meilleure façon de partager des données utilisateur sur plusieurs sites Web Wordpress?

10

Tout d'abord, 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 lors de l'utilisation de Multisite:

Si vous prévoyez de créer des sites fortement interconnectés, qui partagent des données ou partagent 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, 3e phrase)

J'ai essayé d'utiliser le "tour de table utilisateur partagé" comme mentionné ici http://wordpress.org/support/topic/multiple-sites-same-users-how et ici http://xentek.net/articles/528/ mise en œuvre-du-wordpress-shared-users-table-trick / et un certain nombre d'autres endroits ... le problème est que cette information a 2 à 7 ans et j'utilise Wordpress 3.5.1 et cette "astuce" ne fonctionne pas semble pas fonctionner.

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

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

Pour faire court, je ne pense pas que cette astuce fonctionne plus car je ne peux pas du tout me connecter au deuxième site du côté administrateur.

Avez-vous des suggestions sur la meilleure façon de lier ces données?

Ian
la source
1
Je ne comprends pas pourquoi CUSTOM_USER_TABLEne fonctionnerait pas ... Voyez s'il y a quelque chose ici: wordpress.stackexchange.com/search?q=CUSTOM_USER_TABLE
brasofilo
Lorsque j'utilise CUSTOM_USER_TABLE, les utilisateurs sont partagés entre les sites Web, cependant, sur le deuxième site Web, je ne peux pas me connecter en tant qu'administrateur. En cherchant des heures et en trouvant des plugins et des articles âgés de 2 à 7 ans, je pense que cette astuce ne fonctionne plus dans la version 3.5.1 ...
Ian
La question est que ce n'est pas un truc , c'est une fonctionnalité de base . Il semble qu'aucun bug n'a été signalé, et rien de pertinent
n'apparaît dans la
Merci pour vos commentaires. J'ai pu trouver la réponse en approfondissant certaines choses que j'ai vues dans vos liens. J'ai posté ma solution ci-dessous. Merci encore @brasofilo
Ian
Vraiment génial, vous avez presque couvert toutes les façons de partager les utilisateurs. mais j'ai une situation un peu différente ici. Ive 5 site wordpress que chaque site Web particulier a sa propre base de données. Comment puis-je utiliser votre solution pour connecter toutes les tables d'utilisateurs distinctes de manière à ce qu'un nouvel utilisateur s'inscrive sur l'un des 5 sites Web, il pourrait immédiatement se connecter à n'importe quel autre site Web en utilisant une seule inscription? Je suis conscient d'un moyen d'accomplir cela dans une seule base de données en utilisant le WPMU, mais je ne trouve pas vraiment de moyen de le faire sur des installations séparées de wordpress. Appréciera toute aide. Merci

Réponses:

8

D'accord, tout d'abord, je me sens comme un idiot, bien que pour ma défense la plupart des articles qui en parlent ne mentionnent pas un détail très crucial pour faire fonctionner ce travail. La réponse est que vous devez définir l'autorisation pour au moins un administrateur dans la base de données. Ces informations peuvent être trouvées 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 que vous apportiez une modification au champ de la table wp_capabilities et à la colonne meta_value du champ de la table usermeta principale (dans mon cas, wp_usermeta). Pour ce faire, via phpMyAdmin.

Remarque: effectuez cette opération 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 êtes entré.

Capture d'écran des autorisations des utilisateurs qui seront modifiées

Pour chaque site Web créé, ce nouveau préfixe de site doit avoir le rôle d'utilisateur administrateur.

Dans mon cas, car je ne travaille 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";}

Capture d'écran de la valeur wp_usermeta

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 définit les autorisations pour le deuxième site Web (dans ce cas avec le préfixe tbs_).

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

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

Ian
la source
Jamais utilisé cette fonctionnalité, mais content de savoir qu'il y a ce petit truc pour le faire fonctionner;) Belle rédaction +1
brasofilo
1
merci, cela devrait certainement être mentionné dans les tutoriels!
Mircea Sandu
2

Lors du partage de wp_users et wp_meta, il y a 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 la façon la plus simple de le faire, sans bricoler la base de données, est d'utiliser des internes 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 administrateur.
  • Les utilisateurs peuvent avoir plus d'un rôle, les capacités comptent.

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

cenk
la source
0

J'ai dû 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é.

James Smith
la source
1
Dans la réponse ci-dessus, "tbs" est le préfixe du deuxième site WordPress que j'ai installé. Ainsi, au lieu que la table soit wp_posts, ils seraient tbs_posts. Sauf si vous définissez explicitement $ table_prefix = 'tbs_'; ça ne marchera pas.
Ian