Qual é a melhor maneira de compartilhar dados do usuário em vários sites do Wordpress?

10

Primeiro de tudo, o Multisite não é o que estou procurando. Eu tenho 5 sites usando o Wordpress, todos em domínios separados para os quais gostaria de habilitar contas de usuário. Eu preciso que os dados do usuário sejam compartilhados em toda a rede e, quando um usuário criar uma conta, eles também terão acesso instantâneo a todos os outros sites. O que estou tentando fazer não é recomendado pelo Wordpress ao usar o Multisite:

Se você planeja criar sites fortemente interconectados, que compartilhem dados ou compartilhem usuários, uma rede multissite talvez não seja a melhor solução. - http://codex.wordpress.org/Before_You_Create_A_Network (1º parágrafo, 3ª frase)

Eu tentei usar o "truque da tabela de usuários compartilhados", como mencionado aqui http://wordpress.org/support/topic/multiple-sites-same-users-how e aqui http://xentek.net/articles/528/ implementando o truque da tabela de usuários compartilhados wordpress / e vários outros lugares ... o problema é que essas informações têm de 2 a 7 anos e estou usando o Wordpress 3.5.1 e esse "truque" não parece funcionar.

Eu tentei inserir esse código no wp-config ao redor da $table_prefixlinha.

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

Para encurtar a história, acho que esse truque não funciona mais, pois não consigo fazer login no segundo site do lado do administrador.

Alguma sugestão sobre qual seria a melhor maneira de vincular esses dados?

Ian
fonte
11
Eu não entendo por que CUSTOM_USER_TABLEnão iria funcionar ... ver se há algo aqui: wordpress.stackexchange.com/search?q=CUSTOM_USER_TABLE
brasofilo
Quando uso CUSTOM_USER_TABLE, os usuários são compartilhados entre sites, no entanto, no segundo site, não consigo fazer login como administrador. Pesquisando em torno de horas e encontrar plugins e artigos que são 2-7 anos de idade me levam a acreditar que este truque não funciona mais no 3.5.1 ...
Ian
A questão é que isso não é um truque , é um recurso essencial . Parece que não bug foi relatado, e nada relevantes aparece em lista [wp-hackers] ...
brasofilo
Obrigado por seus comentários. Consegui encontrar a resposta examinando mais profundamente algumas coisas que vi nos seus links. Publiquei minha solução abaixo. Obrigado novamente @brasofilo
Ian
Realmente ótimo, você quase abordou todas as maneiras de compartilhar os usuários. mas tenho uma situação um pouco diferente aqui. Eu tenho 5 sites wordpress que cada site específico tem seu próprio db. Como posso usar sua solução para conectar todas as tabelas de usuários separadas de uma maneira, quando um novo usuário se registra em qualquer um dos 5 sites, ele pode imediatamente fazer login em qualquer outro site usando um único registro? Estou ciente de alguma maneira de fazer isso em um único banco de dados usando a WPMU, mas não estou encontrando nenhuma maneira de fazê-lo em instalações separadas do wordpress. Apreciará qualquer ajuda. Obrigado

Respostas:

8

Ok, antes de tudo, me sinto um idiota, embora em minha defesa a maioria dos artigos que falam sobre isso não mencione um detalhe muito crucial para fazer esse trabalho. A resposta é que você precisa definir permissão para pelo menos um administrador no banco de dados. Esta informação pode ser encontrada no Codex aqui: http://codex.wordpress.org/Editing_wp-config.php#Custom_User_and_Usermeta_Tables

Depois de configurar o arquivo wp-config.php, é essencial que você faça uma alteração na tabela master usermeta (no meu caso, wp_usermeta) no campo wp_capabilities row e na meta_value. Faça isso através do phpMyAdmin.

Nota: Faça isso para pelo menos um administrador de usuário fazer login. Você pode ajustar todas as outras funções de usuário / administrador no back-end assim que entrar.

Captura de tela de quais permissões de usuários serão alteradas

Para cada site criado, ele precisa ter esse novo prefixo de sites atribuído à função de usuário administrador.

No meu caso, como eu só tenho esse trabalho em 2 sites no momento, fica assim:

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

Captura de tela do valor wp_usermeta

A primeira linha define permissões para o prefixo da tabela padrão (neste caso, wp_) e a segunda linha define as permissões para o segundo site (neste caso, com o prefixo tbs_).

Agradeço ao brasofilo pelo comentário que me levou a cavar um pouco mais para finalmente resolver meu problema!

Espero que esta resposta possa ajudar outras pessoas que estavam tendo o mesmo problema que eu.

Ian
fonte
Nunca usei esse recurso, mas feliz em saber que existe este pequeno truque para fazê-lo funcionar;) Nice write-up +1
brasofilo
11
obrigado, isso definitivamente deve ser mencionado nos tutoriais!
Mircea Sandu
2

Ao compartilhar wp_users e wp_meta, há outro problema, outra instalação do wordpress reconhece os usuários, mas não reconhece as funções dos usuários provenientes de outro site . O papel aparece como indefinido.

Então, você editou seu wp-config.php conforme necessário:

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

Eu acho que a maneira mais fácil de fazer isso, sem mexer com o db, é usando wp internals. No login, é possível atribuir uma função. Digamos, precisamos da função de colaborador para todos e da função de administrador para o usuário 'super-homem'.

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);

Portanto, os usuários provenientes do site inicial recebem a função de 'colaborador' quando fazem login.

  • Você pode excluir a verificação do usuário depois de fazer login com o usuário administrador.
  • Os usuários podem ter mais de uma função, os recursos são importantes.

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

cenk
fonte
0

Eu tive que criar uma nova linha:

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

e user_id=1. O método que você descreveu não funcionou.

James Smith
fonte
11
Na resposta acima, "tbs" é o prefixo do segundo site do WordPress que eu instalei. Portanto, em vez de a tabela ser wp_posts, eles seriam tbs_posts. A menos que você defina explicitamente $ table_prefix = 'tbs_'; não vai funcionar.
Ian