マルチサイト/ネットワークで私の役割が表示されないのはなぜですか?


16

私のネットワークは、他のサイトではなく、いくつかのサイトで役割を示しています。

説明できない何らかの理由で、新しいユーザーを追加するときに、ネットワーク内のサブサイトのドロップダウンボックスで選択する役割がありません。また、サイトに割り当てられた私の新しいユーザーは、そのサイトのユーザーのリストに表示されません。

これは修正可能ですか?

現在の状況の画像の下。

役割が表示されていません

以下は、メインサイトとその役割が適切に表示されている写真ですが、ネットワークのサブサイトはそうではありません。

示す役割

回答:


29
  1. マルチサイトブログIDを決定します。99を例として使用します
  2. データベースに入る
  3. このテーブルに移動します:wp_##_options(wp_99_options)—各ブログのテーブルがあります
  4. option_name= を見つけますwp_user_roles
  5. テキストwp_user_roleswp_##_user_roles( "wp_99_user_roles")に変更します

あなたが編集しているテーブルがありますoption_idblog_idoption_nameoption_valueautoload。ただし、=のレコードを除き、どのレコードも変更しないでください。このようなテーブルには、このようなレコードが1つしかありません。option_namewp_user_roles

wp_user_roles Multisiteがインストールされていない場合に使用されます。ここでは、テーブルが作成されたときのバグのように見えます。


ありがとうございました!ここで命を救うアドバイス。これはまさに正しい答えです。
-ZaMoose

1
テーブルに "wp_user_roles"がありませんでした。wp_4_options> wp_user_roles(大きなjsonオブジェクトまたはシリアル化された配列、私は知らない)の内容をwp_5_optionsと呼ばれる新しいレコードにコピーしました。私の問題を修正しました。それにもかかわらず、+ 1に投票されたのは、それが私を正しい軌道に乗せたからです
ザナナックス

また、メインのwp_optionsテーブルからレコード "wp _ ## _ user_roles"を削除することも解決しました。これは、wp _ ## _ optionsのレコードをオーバーライドするようだからです。
パオロ

1
素晴らしい答えです!
jnthnclrk

7
あなたのサイトや変更された接頭辞を移行した人々のために、エラーが「WP _ ## _ user_roles」の代わりに「{} new_prefix _ ## _ user_roles」かもしれない
Xhynk

2

これが私がよく知っている問題である場合、MUインストールの背後でmemcacheセットアップを実行していますか?私は、「notoptions」memcache配列で何か良いもの(wp_user_rolesキーなど)がスタックするオプションオブジェクトのキャッシュの問題(2.9で目撃)があることを発見しました。

memcacheの上で実行し、これが可能性のように思えるdelete blogid:options:notoptions場合は、11211を介してマシンにtelnet接続してみてください。ここで、blogidは問題が発生しているブログのIDです。管理パネルを更新し、ドロップダウンに役割があるかどうかを確認します。その場合、問題が見つかりました。

更新:OK、それであなたはあなたの問題を見つけませんでした-あなたはmemcacheを実行していませんでした。ロールオブジェクトをチェックアウトして、破損または存在しないものを探します。それがあなたの最高のリードだと思います。このコードを使用して、オプションテーブルをダンプできます。

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/>";
}

編集者。memcacheがサーバーにどのように侵入したかわかりません。まったく使用していません。おそらくw3キャッシュをインストールしたからでしょう。削除しようとすると、not_foundというメッセージが表示されました。使用していないので、先に進んでmemcacheを無効にしました。私はまだ問題を抱えています。
ジオ

ごめんなさい、それはあなたの問題の解決策ではありませんでした。私はこれに頻繁に遭遇するので、それは私の最高の推測でした。そのブログのrolesオブジェクトを引き続き調べていきます。存在しますか?上記の私の答えが更新されることを期待して更新しました。
編集者

1

WordPressを再インストールし、Updraft Plusバックアップから復元した後、マルチサイトインストールでこの問題が発生しました。

user_rolesレコードをチェックしたとき、option_nameはのような元の4文字のプレフィックスに設定されたままpre1_user_rolesでしたが、2番目のインストールのプレフィックスはのようなものpre2_user_rolesでした。

これを更新pre2_user_rolesし、ユーザーオプションページにオプションがすぐに再表示されました。


1

ありがとうございました。この問題は、10時間の確実なデバッグを表します。これは私にとって本当の熊でした。

これを少し拡張するために、サイトをプログラムで作成している場合にこの問題を解決できる機能をサイトに追加しました。

基本的に、これはwp_user_roles指定されたブログで設定されているかどうかを確認します。そうである場合、関数はwp_user_roles新しいオプションを正しい方法で設定するために使用します。

  /**
   * 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

私は長い間この問題の解決策を探していたので、この記事に感謝したいだけです。

プラグインを使用してサイトのクローンを作成したため、wp_##_user_roles適切に更新されなかったからです。そこからコピーされたwp_13...サイトwp_81...が新しいサイトに複製されたが、このエントリはまだスタックしていましたwp_13


0

一部のユーザーは、特にルートサイト専用の空のサイトユーザーテーブルを持っている場合があることを指摘したいと思います。この問題が発生した場合、問題を解決する方法は次のとおりです。

  1. テーブルwp_usermetaに移動します
  2. meta_key wp_capabilitiesを持つエントリを見つけます
  3. meta_keywp_capabilitiesからwp_1_capabilitiesに変更します

「1」は常にルートサイトのIDです。

乾杯。


wp_接頭辞はsinde設定されているwp-config.phpと、ちょうどデフォルトをwp_1実際、ルートサイトです。ただし1、これは、自動生成される一意の増分IDである必要はありません。
カイザー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.