サポート » 使い方全般 » 特定のアドレスの場合だけwp_redirectが働かない

  • 解決済 shokun0803

    (@shokun0803)


    function redirect_dashiboard() {
    	global $current_user;
    	get_currentuserinfo();
    	if ( !current_user_can('manage_options') ) {
    		switch( true ) {
    			case preg_match('/\/wp-admin\/edit-pages\.php/', $_SERVER['REQUEST_URI']):
    				wp_redirect(get_option('siteurl') . '/wp-admin/edit-pages.php?author=2');
    				break;
    			case preg_match('/\/wp-admin\/profile\.php/', $_SERVER['REQUEST_URI']):
    				wp_redirect(get_option('siteurl') . '/wp-admin/index.php');
    				break;
    		}
    	}
    }
    add_action( 'init', 'redirect_dashiboard' );

    上記ソースでedit-pages.phpを指定した場合だけwp_redirectが働きません。
    理由がまったく掴めません・・・
    ご助力お願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター jim912

    (@jim912)

    shokun0803さん、こんにちは。

    リダイレクト先でもマッチしてしまい、永久ループ状態になっているのではないでしょうか。

    トピック投稿者 shokun0803

    (@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は実行されます。
    もちろんこの状態でプロフィールをクリックするとダッシュボードへリダイレクトされます。

    原因が掴めません・・・(泣)

    モデレーター jim912

    (@jim912)

    shokun0803さん、こんにちは。

    違いましたか。。。
    では、下記チェックしてみてください。

    1. wp_redirectの直後にexit;を実行する
    2. wp_redirectを先に定義しているプラグインが無いか、あったらデフォルトと異なる動作による影響ではないかを確認する
    3. wp_redirect内で$locationをdumpさせてみる。

    wp_redirect関数の記述場所はwp-includes/pluggable.phpの849行目-(ver2.8.6)です。

    トピック投稿者 shokun0803

    (@shokun0803)

    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が繰り返す可能性があったのですね。
    大変勉強になりました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「特定のアドレスの場合だけwp_redirectが働かない」には新たに返信することはできません。