Jaki jest najlepszy sposób udostępniania danych użytkowników na wielu stronach Wordpress?

10

Po pierwsze, Multisite nie jest tym, czego szukam. Mam 5 stron internetowych korzystających z Wordpress, wszystkie w osobnych domenach, dla których chciałbym włączyć konta użytkowników. Potrzebuję, aby dane użytkownika były udostępniane w całej sieci, a kiedy użytkownik utworzy konto, będzie miał natychmiastowy dostęp do wszystkich innych stron internetowych. To, co próbuję zrobić, nie jest zalecane przez Wordpress podczas korzystania z Multisite:

Jeśli planujesz tworzyć witryny, które są ze sobą ściśle powiązane, współużytkują dane lub współużytkują użytkowników, sieć wielostanowiskowa może nie być najlepszym rozwiązaniem. - http://codex.wordpress.org/Before_You_Create_A_Network (pierwszy akapit, trzecie zdanie)

Próbowałem użyć „sztuczki udostępnionej tabeli użytkowników”, jak wspomniano tutaj http://wordpress.org/support/topic/multiple-sites-same-users-how i tutaj http://xentek.net/articles/528/ implementowanie sztuczki-wordpress-shared-users-table-trick / i wielu innych miejsc ... problem polega na tym, że ta informacja ma 2-7 lat i używam Wordpress 3.5.1, a ta „sztuczka” nie wydaje się, że działa.

Próbowałem wstawić ten kod do wp-config wokół $table_prefixlinii.

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

Krótko mówiąc, nie sądzę, że ta sztuczka już działa, ponieważ nie jestem w stanie zalogować się na drugiej stronie po stronie administratora.

Wszelkie sugestie dotyczące najlepszego sposobu połączenia tych danych?

Ian
źródło
1
Nie rozumiem, dlaczego CUSTOM_USER_TABLEnie miałbym działać ... Sprawdź, czy coś tu jest: wordpress.stackexchange.com/search?q=CUSTOM_USER_TABLE
brasofilo
Gdy korzystam z CUSTOM_USER_TABLE, użytkownicy dzielą się między witrynami, jednak w drugiej witrynie nie mogę zalogować się jako administrator. Przeszukanie godzin i znalezienie wtyczek i artykułów, które mają 2-7 lat, doprowadziło mnie do przekonania, że ​​ta sztuczka nie działa już w 3.5.1 ...
Ian
Pytanie brzmi, że to nie jest sztuczka , to podstawowa funkcja . Wygląda na to, że nie zgłoszono żadnego błędu i nic istotnego nie pojawia się na liście [wp-hackerów] ...
brasofilo 12.02.13
Dziękuję za komentarze. Znalazłem odpowiedź, przyglądając się bliżej niektórym rzeczom, które widziałem w twoich linkach. Moje rozwiązanie opublikowałem poniżej. Jeszcze raz dziękuję @brasofilo
Ian
Naprawdę wspaniale, że omal wszystkie sposoby udostępniania użytkowników. ale mam tu trochę inną sytuację. Ive 5 wordpress strona internetowa, że ​​każda konkretna strona ma swój własny db. Jak mogę użyć twojego rozwiązania, aby połączyć wszystkie oddzielne tabele użytkowników w taki sposób, że gdy nowy użytkownik zarejestruje się na jednej z 5 stron internetowych, może natychmiast zalogować się na dowolnej innej stronie internetowej za pomocą jednej rejestracji? Jestem świadomy jakiegoś sposobu na osiągnięcie tego w jednej bazie danych przy użyciu WPMU, ale tak naprawdę nie znajduję żadnego sposobu, aby to zrobić w oddzielnych instalacjach Wordpress. Udzieli pomocy. Dziękuję

Odpowiedzi:

8

Ok, po pierwsze czuję się jak idiota, chociaż w mojej obronie większość artykułów na ten temat nie wspomina o bardzo ważnym szczególe w tworzeniu tej pracy. Odpowiedź brzmi: musisz ustawić uprawnienia dla przynajmniej jednego administratora w bazie danych. Informacje te można znaleźć w Kodeksie tutaj: http://codex.wordpress.org/Editing_wp-config.php#Custom_User_and_Usermeta_Tables

Po skonfigurowaniu pliku wp-config.php konieczne jest dokonanie zmiany w głównej tabeli usermeta (w moim przypadku wp_usermeta) w wierszu wp_capabilities i kolumnie meta_value. Zrób to za pośrednictwem phpMyAdmin.

Uwaga: Zrób to, aby zalogować się co najmniej jeden administrator użytkownika. Po zalogowaniu możesz dostosować wszystkie inne role użytkowników / administratorów z zaplecza.

Zrzut ekranu przedstawiający uprawnienia użytkowników zostaną zmienione

Dla każdej tworzonej witryny musi mieć przypisany nowy prefiks witryn do roli administratora.

W moim przypadku, ponieważ mam to działa tylko na 2 stronach w tej chwili, wygląda to tak:

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

Zrzut ekranu wartości wp_usermeta

Pierwszy wiersz ustawia uprawnienia dla domyślnego prefiksu tabeli (w tym przypadku wp_), a drugi wiersz ustawia uprawnienia dla drugiej strony internetowej (w tym przypadku z prefiksem tbs_).

Dzięki brasofilo za komentarz, który skłonił mnie do głębszego wykopania, aby w końcu rozwiązać mój problem!

Mam nadzieję, że ta odpowiedź może pomóc innym, którzy mieli ten sam problem, co ja.

Ian
źródło
Nigdy nie korzystałem z tej funkcji, ale cieszę się, że istnieje ta mała sztuczka, aby działała;) Niezły
napis
1
dziękuję, zdecydowanie należy o tym wspomnieć w tutorialach!
Mircea Sandu
2

Podczas udostępniania wp_users i wp_meta jest inny problem, inna instalacja wordpress rozpoznaje użytkowników, ale nie rozpoznaje ról użytkowników pochodzących z innej strony . Rola pojawia się jako niezdefiniowana.

Więc zmodyfikowałeś swój wp-config.php zgodnie z wymaganiami:

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

Myślę, że najłatwiejszym sposobem na to, bez majsterkowania przy db, jest użycie wewnętrznych elementów wp. Po zalogowaniu można przypisać rolę. Powiedzmy, że potrzebujemy roli współtwórcy dla wszystkich oraz roli administratora dla użytkownika „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);

Tak więc użytkownicy pochodzący z początkowej strony internetowej otrzymują rolę „współtwórcy” podczas logowania.

  • Możesz usunąć czek użytkownika po zalogowaniu się z administratorem.
  • Użytkownicy mogą odgrywać więcej niż jedną rolę, możliwości mają znaczenie.

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

cenk
źródło
0

Musiałem utworzyć nowy wiersz:

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

a user_id=1. Opisana metoda nie zadziałała.

James Smith
źródło
1
W powyższej odpowiedzi „tbs” jest prefiksem drugiej strony WordPress, którą zainstalowałem. Więc zamiast tabeli będącej wp_posts będą to tbs_posts. Chyba że wyraźnie ustawisz $ table_prefix = 'tbs_'; to nie zadziała.
Ian