web-dev-qa-db-ja.com

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

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

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

これは修正可能ですか?

現在の状況の画像の下。

Roles not Showing

下の写真はメインサイトが適切に役割を持っているが、ネットワークのサブサイトはそうではないことを示しています。

Roles showing

15
Geo
  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があります。ただし、 レコードを変更しないでください option_name = wp_user_rolesのレコードを除く。このテーブルには、このように単一のレコードしかありません。

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

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

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

UPDATE: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/>";
}
2
editor

私はWordPressを再インストールし、Updraft Plusバックアップから復元した後のMultisiteインストールでこの問題を抱えていた。

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

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

1
Richard Hare

ありがとうございました。この問題は、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 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();
  }
1
Alex Standiford

私は長い間この問題の解決策を探してきたので、私はちょうどこの記事をありがとうと言いたいと思いました。

これは単に、自分のサイトのクローンを作成するためにプラグインを使用したため、wp_##_user_rolesが正しく更新されなかったためです。サイトがwp_13...からコピーされたとき、それは新しいサイトwp_81...にクローンされました、しかしこのエントリーはまだwp_13で立ち往生していました。

0
Joseph Dowdy

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

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

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

乾杯。

0
jamilj