次のようなメッセージが表示されます。
アプリケーションパスワードプラグイン
Cookie nonceが無効です
iThemesのセキュリティ
一回限りのセキュリティチェックが失敗し、要求が期待どおりに完了できませんでした。ページを再読み込みしてからもう一度お試しください。
...ネットワーク(サブディレクトリマルチサイト)adminに設定を保存しようとしたとき。しかし、サイト内のプラグインに設定パネルを使用した場合、このメッセージは表示されません。
私はいくらかのデバッグをしました、そして、私が見つけたものはそれが wp_verify_nonce() で常にfalseを返すということでした。 Cookieトークンが予想されるトークンと一致することはありません。 Wordpressがこのように動作している理由はわかりません。
Wordpressのnonceがこのように動作している理由を誰かが知っていますか?どうすれば修正できますか?
私はBedrockを使用していて、これが私の設定です。
define('WP_HOME', 'http://my-local-cms.dev');
define('WP_SITEURL', 'http://my-local-cms.dev/backend');
define('CONTENT_DIR', '/app');
define('ADMIN_COOKIE_PATH', '/');
define('COOKIE_DOMAIN', '');
define('COOKIEPATH', '');
define('SITECOOKIEPATH', '');
define('WP_ALLOW_MULTISITE', true);
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'my-local-cms.dev');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
私はその問題を見つけた。
ネットワーク管理者へのリンクが正しくありません。たとえば、ネットワークユーザーは次のようになります。
そうであるべきです(wordpressコアがバックエンド/にある場合)
最初のリンクにアクセスし、ブラウザでwp-adminの前に/ backend /を追加すると、ネットワーク管理者は正しく動作します。
修正
編集2017-08-30新しい解決策:
public function fix_network_admin_url($path, $scheme) {
$path = ltrim($path, '/');
return str_replace('/wp-admin/network', '/backend/wp-admin/network', $path);
}
add_filter('network_admin_url','fix_network_admin_url', 10, 3);
2017-08-30編集の終わり
私がこれを解決するために選んだ方法は、正しいリンクを使って別のネットワーク管理メニューを作ることです。これは優雅な解決策ではありません、 しかし、私はネイティブのネットワーク管理メニューだけのURLを修正し、残りのリンクをそのままにする方法を知りません(「他の可能性のある解決策」を見てください)。
私の解決策はこれに似ています(テーマのfunction.phpに追加するかプラグインを作成する):
add_action('admin_head', 'admin_head_network_menu');
add_action('admin_bar_menu', 'custom_network_admin_bar_menu', 20);
function admin_head_network_menu()
{
echo '<style type="text/css">#wp-admin-bar-my-sites-super-admin {display: none}</style>';
}
function custom_network_admin_bar_menu($adminBar)
{
// Don't add network admin bar for non super admins
if (!current_user_can('manage_network')) {
return;
}
$mainMenuID = 'my-new-network-admin-menu';
$adminBar->add_menu([
'id' => $mainMenuID,
'title' => __('Network Admin'),
'href' => new_admin_url(),
]);
$adminBar->add_menu([
'id' => $mainMenuID.'-sites',
'parent' => $mainMenuID,
'title' => __('Network Sites'),
'href' => new_admin_url('sites.php'),
]);
$adminBar->add_menu([
'id' => $mainMenuID.'-users',
'parent' => $mainMenuID,
'title' => __('Network Users'),
'href' => new_admin_url('users.php'),
]);
$adminBar->add_menu([
'id' => $mainMenuID.'-plugins',
'parent' => $mainMenuID,
'title' => __('Network Plugins'),
'href' => new_admin_url('plugins.php'),
]);
$adminBar->add_menu([
'id' => $mainMenuID.'-settings',
'parent' => $mainMenuID,
'title' => __('Network Settings'),
'href' => new_admin_url('settings.php'),
]);
}
function new_admin_url($path = '')
{
$url = network_admin_url($path);
return str_replace('/wp-admin/network', '/backend/wp-admin/network', $url);
}
その他の考えられる解決策
(サブ)ドメインのマルチサイトインストールをお持ちの場合は、Githubの "felixarntz/multisite-fixes"(mu-plugins/wpms-site-url-fixer.php)をチェックしてください。
私は多分これは.htaccessの変更で解決できると思います。いくつかの理由で、これは私のプロジェクトの選択肢ではありませんでした。しかし、他の誰かが試してみたいのであれば、これがBedrockの.htaccessの例です。
RewriteEngine On
RewriteBase /wp/
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]