web-dev-qa-db-ja.com

WordPressは、ローカルの開発者マシン上で欠けているユーザーロールです。ライブサイトはうまくいきます

私はライブのWordPressインストールと開発目的のためのローカルのものを持っています。ライブデータベースをエクスポートし、ライブsiteurlのすべての存在をローカルのものに置き換えて、私の開発マシンにインポートしました。

問題は、私の開発したマシンでは、すべてのユーザがパーミッションを失ったことです。ログインすると次のようになります。

Notice: Undefined offset: 2 in /var/www/mysite/wp-admin/includes/plugin.php on line 1390 

ページテンプレートでは、現在のユーザー情報を次のようにダンプしました。

global $current_user;
var_dump( get_currentuserinfo() );

これは私の開発マシンではNULLを、私のライブインストールでは正しいユーザー情報を返します。私は二重にテーブルのプレフィックス、パーミッションをチェックし、きれいなWordPressのインストールなどを試したが運が悪かった。これについての紛らわしいことは、私がカスタムSQLクエリで完璧にユーザー情報を問い合わせることができるということです。

編集:さらに詳しく調べると、グローバルな$ wp_rolesにはユーザーロールと機能が含まれていないことがわかりました。 WordPressはどういうわけかこれをデータベースから取得できません...

編集2:編集して申し訳ありません。しかし、私は問題を見つけました。 wp_optionsテーブルの中には、 "wp_user_roles"という行があります。値、シリアル化されていない文字列には、文字列をシリアル化解除しようとするとエラーが発生する空白文字が含まれていました。データベースの値を実際のサイトの値に置き換えたところ、すべてうまくいきました。

1

ライブデータベースをエクスポートし、ライブsiteurlのすべての存在をローカルのものに置き換えて、私の開発マシンにインポートしたところです。

テキストエディタで検索/置換すると、シリアル化されたデータが壊れます。 phpmyadminのMySQLクエリで値を変更する必要があります。

UPDATE wp_options SET option_value = replace(option_value, 'http://www.olddomain.com/', 'http://www.newdomain.com/') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://www.olddomain.com/blog/','http://www.newdomain.com/');

UPDATE wp_posts SET post_content = replace(post_content, 'http://www.olddomain.com/blog/', 'http://www.newdomain.com/');

UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://www.olddomain.com/blog/', 'http://www.newdomain.com/');
2
markratledge

万が一他の誰かがこの問題を抱えている場合:

カスタムテーブルプレフィックスを持つ2つのサイトがありました。この接頭辞は、オプション表の一部のにも使用されます。あるサイトから別のサイトにオプションテーブルを移動するとき、私はオプションテーブル自体の名前を変更しましたが、いくつかのオプション名、特に実際はwp_user_rolesであるprefix_user_rolesオプションの名前も変更する必要があることを知りませんでした。私のwp_optionsprefix_options)テーブルには、その接頭辞を付けたオプションがいくつかありました。

Wordpressは、私を締め出していたprefix_user_rolesオプションを認識できなかった場合、自動的にotherprefix_user_rolesオプションを作成しました。

1
Ewout