shokun0803さん、こんにちは。
リダイレクト先でもマッチしてしまい、永久ループ状態になっているのではないでしょうか。
実は色々実験していまして、
switch( true ) {
case preg_match('/\/wp-admin\/edit-pages\.php/', $_SERVER['REQUEST_URI']):
var_dump('ue');
wp_redirect(get_option('siteurl') . '/wp-admin/index.php');
var_dump('shita');
break;
case preg_match('/\/wp-admin\/profile\.php/', $_SERVER['REQUEST_URI']):
wp_redirect(get_option('siteurl') . '/wp-admin/index.php');
break;
}
のように、リンク先をダッシュボードにしてもページの編集をクリックしてリダイレクトされないのです。その際、var_dumpのueとshitaは実行されます。
もちろんこの状態でプロフィールをクリックするとダッシュボードへリダイレクトされます。
原因が掴めません・・・(泣)
shokun0803さん、こんにちは。
違いましたか。。。
では、下記チェックしてみてください。
- wp_redirectの直後にexit;を実行する
- wp_redirectを先に定義しているプラグインが無いか、あったらデフォルトと異なる動作による影響ではないかを確認する
- wp_redirect内で$locationをdumpさせてみる。
wp_redirect関数の記述場所はwp-includes/pluggable.phpの849行目-(ver2.8.6)です。
jim912さん、ありがとうございます!
1.のexit;の実行で無事動作できました。
現状は
function redirect_dashiboard() {
global $current_user;
get_currentuserinfo();
if ( !current_user_can('manage_options') ) {
switch( true ) {
case preg_match('/^\/wordpress(\/wp-admin\/edit-pages\.php)(\?[^author][^=]+=[^&]+)?$/', $_SERVER['REQUEST_URI'], $author_url):
$redirect_url = get_option('siteurl') . $author_url[1];
if( $author_url[2] ) {
$redirect_url .= $author_url[2] . "&author=" . $current_user->ID;
} else {
$redirect_url .= "?author=" . $current_user->ID;
}
wp_redirect( $redirect_url );
exit;
break;
case preg_match('/\/wp-admin\/profile\.php/', $_SERVER['REQUEST_URI']):
wp_redirect(get_option('siteurl') . '/wp-admin/index.php');
exit;
break;
}
}
}
add_action( 'init', 'redirect_dashiboard' );
のようなコードで動作確認が取れております。
何か他のredirectと競合していたのですね・・・構文さえ抜けていれば大丈夫だと思っていました。スクリプトそのものから抜けないとredirectが繰り返す可能性があったのですね。
大変勉強になりました。