Por que minhas funções não são visíveis em vários sites / rede?


16

Minha rede está mostrando funções em alguns sites e não em outros.

Por alguma razão que não consigo explicar, quando adiciono um novo usuário, não tenho funções 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á aparecendo na minha lista de usuários para esse site.

Isso é algo corrigível?

Abaixo uma imagem da situação atual.

Funções não exibidas

Abaixo está a figura que mostra o site principal com as funções apropriadas, mas os sub-sites da rede não.

Funções mostrando

Respostas:


29
  1. Determine seu ID de blog multissite. Vou usar 99 como exemplo
  2. Entre no banco de dados
  3. Vá 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_rolespara 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 ALTERE QUALQUER GRAVAÇÃO, exceto o registro em que option_name= wp_user_roles. Haverá apenas um registro nesta tabela como este.

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


Obrigado! Conselhos para salvar vidas aqui. Esta é EXATAMENTE a resposta certa.
ZaMoose 17/09/11

1
Eu não tinha "wp_user_roles" na minha tabela, o que fiz foi copiar o conteúdo de wp_4_options> wp_user_roles (um objeto json grande ou uma matriz serializada, eu entro) para um novo registro chamado wp_5_options (esse foi o papel que faltava no blog) e corrigiu meu problema. Votado +1, no entanto, porque ele me colocou no caminho certo
Xananax

Resolvi também REMOVER o registro "wp _ ## _ user_roles" da tabela principal wp_options, porque parece substituir o das opções wp _ ## _.
Paolo

1
Resposta brilhante!
precisa saber é o seguinte

7
Para pessoas que migraram seu site e alteraram prefixos, o erro pode ser um "wp _ ## _ user_roles" em vez de "{new_prefix} _ ## _ user_roles"
Xhynk

2

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

Se você executar no topo do memcache, e isso parecer uma possibilidade, tente fazer o telnet na máquina via 11211. Digite delete blogid:options:notoptions, onde o blogid é o ID do blog no qual você vê o problema. Atualize o painel do administrador e veja se há funções na lista suspensa. Nesse caso, você encontrou seu problema.

UPDATE : OK, então você não encontrou seu problema - você não estava executando o memcache. Eu ainda verificaria o objeto de funções, procurando um objeto corrompido ou inexistente. Eu acredito que é sua melhor liderança. Você pode usar esse 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/>";
}

Editor. Não sei como o memcache entrou no meu servidor. Eu não estou usando isso de jeito nenhum. Talvez porque eu instalei o cache w3. Eu tentei a exclusão que me deu uma mensagem dizendo not_found. Fui em frente e desativei o memcache, pois não o estou usando. Ainda estou tendo o problema.
Geo

Lamento que não tenha sido uma solução para o seu problema. Eu me deparo muito com isso, então foi o meu melhor palpite. Eu continuaria olhando para o objeto de funções desse blog. Isto existe? Atualizei minha resposta acima na esperança de ajudar.
editor de

1

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

Quando verifiquei o user_rolesregistro, o option_name ainda estava definido como o prefixo original de quatro caracteres, como pre1_user_roles, enquanto o prefixo da segunda instalação era algo parecido pre2_user_roles.

Eu atualizei isso pre2_user_rolese as opções reapareceram imediatamente na página de opções do usuário.


1

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

Para expandir um pouco isso, 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_rolesfoi definido no blog especificado. Se for, a função será usada wp_user_rolespara 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 /wordpress/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();
  }

0

Eu só queria dizer obrigado por este artigo, porque estou procurando uma solução para esse problema há muito tempo.

Simplesmente porque eu tinha usado um plugin para clonar meus sites e ele nunca atualizou wp_##_user_rolescorretamente. Quando o site copiado wp_13...foi clonado para um novo site, wp_81...mas essa entrada ainda estava emperrada wp_13.


0

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

  1. Vá para a tabela wp_usermeta
  2. Encontre todas as entradas com a 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.


O wp_prefixo é definido como sinde wp-config.phpe apenas o padrão é wp_. O 1fato é o site raiz. Mas não precisa ser, 1pois esse é um ID exclusivo e incremental que é gerado automaticamente.
Kaiser
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.