Por que minhas funções não são visíveis em um Multi-site / rede?

14

Minha rede está mostrando papéis em alguns sites e não em outros.

Por algum motivo que não consigo explicar, quando adiciono um novo usuário, não tenho papéis para escolher na caixa suspensa de um subsite na minha rede. Além disso, meu novo usuário atribuído a um site não está sendo exibido na minha lista de usuários desse site.

Isso é algo consertável?

Abaixo de uma imagem da situação atual.

Abaixoestáaimagemmostrandoositeprincipalcomasfunçõescorretamente,masossub-sitesdaredenão.

    
por Geo 11.03.2011 / 01:05

6 respostas

26
  1. Determine seu ID de blog multilíngue. Vou usar 99 como um exemplo
  2. Entre no banco de dados
  3. Ir para esta tabela: wp_##_options (wp_99_options) - você terá uma tabela para cada blog
  4. Encontre o registro em que option_name = wp_user_roles
  5. Altere o texto wp_user_roles para wp_##_user_roles ("wp_99_user_roles")

A tabela que você está editando terá option_id , blog_id , option_name , option_value , autoload . No entanto, NÃO MUDE NENHUM REGISTRO , exceto o registro em que option_name = wp_user_roles . Haverá apenas um único registro nesta tabela como este.

wp_user_roles é usado quando não há uma instalação Multisite, e aqui, parece que foi apenas um bug quando a tabela foi criada.

    
por Nashville Website Design 19.07.2011 / 22:27
2

Se este é o problema que eu conheço muito bem, você está executando uma configuração memcache por trás de sua instalação MU? Descobri que há aparentemente um problema de cache (testemunhado em 2.9) para o objeto options, em que algo bom (como a chave wp_user_roles) fica preso na matriz memcache "notoptions".

Se você rodar sobre o memcache, e isso parecer uma possibilidade, tente fazer o telnet na máquina através do 11211. Digite delete blogid:options:notoptions , onde o blogid é o id do blog no qual você vê o problema. Atualize o painel de administração e veja se há papéis na lista suspensa. Se sim, você encontrou seu problema.

UPDATE : OK, então você não encontrou o seu problema - você não estava executando o memcache. Eu ainda verificaria o objeto de papéis, procurando por um corrompido ou inexistente. Eu acredito que é o seu melhor chumbo. Você pode usar este código para despejar a tabela de opções:

global $wpdb;
$array = $wpdb->get_col("SELECT option_name FROM $wpdb->options");
foreach ($array as $key) {
    echo $key . ": <code>";
    var_dump(get_option($key), true));
            echo "</code><br/>";
}
    
por editor 11.03.2011 / 02:39
1

Eu tive este problema com uma instalação Multisite depois de reinstalar o WordPress e restaurar a partir de um backup Updraft Plus.

Quando eu verifiquei o registro user_roles , o option_name ainda estava definido para o prefixo original de quatro caracteres, como pre1_user_roles , enquanto o prefixo para a segunda instalação era algo como pre2_user_roles .

Atualizei isso para pre2_user_roles e as opções reapareceram imediatamente na página de opções do usuário.

    
por Richard Hare 23.05.2017 / 22:54
1

OBRIGADO. Esse problema representa um sólido 10 horas de depuração. Este foi um verdadeiro urso para mim.

Para expandir isso um pouco, adicionei uma função ao meu site que permitirá que você resolva esse problema se estiver criando sites programaticamente.

Basicamente, isso verificará se wp_user_roles foi definido no blog especificado. Se estiver, a função usará wp_user_roles para definir uma nova opção da maneira correta.

  /**
   * Sometimes, user roles do not properly get set when a new site is set up
   * To fix this issue, we check to make sure the data is added properly and update if not
   * See https://wordpress.stackexchange.com/questions/11725/why-are-my-roles-not-visible-in-a-multi-site-network
   */
function maybeAddUserRoles($blog_id){
    switch_to_blog($blog_id);
    if(get_option('wp_user_roles')){
      update_option('wp_'.$blog_id.'_user_roles', get_option('wp_user_roles'));
      delete_option('wp_user_roles');
    }
    restore_current_blog();
  }
    
por Alex Standiford 09.04.2018 / 17:47
0

Eu só queria agradecer por este artigo porque eu tenho procurado por uma solução para este problema por um longo tempo.

Foi simplesmente porque eu usei um plug-in para clonar meus sites e nunca atualizei o wp_##_user_roles corretamente. Quando o site foi copiado de wp_13... , ele foi clonado para um novo site wp_81... , mas essa entrada ainda estava em wp_13 .

    
por Joseph Dowdy 04.12.2014 / 05:28
0

Só quero salientar que algumas pessoas ainda podem ter uma tabela de usuários do site vazia, especificamente para o seu site raiz. Se esse problema ocorrer, a maneira de solucioná-lo é fazendo o seguinte:

  1. Ir para a tabela wp_usermeta
  2. Encontre entradas com o meta_key wp_capabilities
  3. Altere a meta_key de wp_capabilities para wp_1_capabilities

Eu acredito que "1" é sempre o ID do site raiz.

Felicidades.

    
por jamilj 21.07.2016 / 20:41