私のネットワークは、他のサイトではなく一部のサイトで役割を示しています。
説明できないという理由で、新しいユーザーを追加したときに、自分のネットワークのサブサイトのドロップダウンボックスで選択できる役割がありません。また、サイトに割り当てられた私の新しいユーザーがそのサイトのユーザーのリストに表示されていません。
これは修正可能ですか?
現在の状況の画像の下。
下の写真はメインサイトが適切に役割を持っているが、ネットワークのサブサイトはそうではないことを示しています。
wp_##_options
(wp_99_options) - あなたは各ブログのためのテーブルを持つでしょうoption_name
= wp_user_roles
のレコードを探すwp_user_roles
をwp_##_user_roles
( "wp_99_user_roles")に変更します編集中のテーブルには、option_id
、blog_id
、option_name
、option_value
、autoload
があります。ただし、 レコードを変更しないでください 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/>";
}
私はWordPressを再インストールし、Updraft Plusバックアップから復元した後のMultisiteインストールでこの問題を抱えていた。
user_roles
レコードをチェックしたとき、option_nameはまだpre1_user_roles
のように元の4文字のプレフィックスに設定されていましたが、2番目のインストールのプレフィックスはpre2_user_roles
のようなものでした。
これをpre2_user_roles
に更新したところ、オプションはすぐにユーザーオプションページに表示されました。
ありがとうございました。この問題は、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();
}
私は長い間この問題の解決策を探してきたので、私はちょうどこの記事をありがとうと言いたいと思いました。
これは単に、自分のサイトのクローンを作成するためにプラグインを使用したため、wp_##_user_roles
が正しく更新されなかったためです。サイトがwp_13...
からコピーされたとき、それは新しいサイトwp_81...
にクローンされました、しかしこのエントリーはまだwp_13
で立ち往生していました。
特にルートサイト用に、まだ空のサイトユーザーテーブルがある場合があることを指摘しておきます。この問題が発生した場合、それを解決する方法は次のとおりです。
"1"は常にルートサイトのIDです。
乾杯。