サポート » 使い方全般 » 特定の権限者が特定のURLへアクセス時リダイレクト

  • 解決済 pochi555

    (@pochi555)


    特定の権限者(例:購読者)が特定のURLにアクセスした場合、任意のURL(例:トップページなど)へリダイレクトさせたいと思っております。
    お手数ですが、方法がございましたらお教えいただけますでしょうか?
    Functions.phpなどに記載する方法やその他の方法でも何でも構いません。

    (例)
    権限者:購読者
    特定のURL:https://aaaa.com/001/abc.html
    任意のURLリダイレクト先:https://aaaa.com/

    よろしくお願いいたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • こんばんは。

    function custom_redirect(){
    	if( current_user_can( 'subscriber' ) ){
    		if( urldecode( get_permalink() ) === 'https://aaaa.com/001/abc.html' ){
    			wp_redirect( 'https://aaaa.com/' );
    			exit;
    		}
    	}
    }
    
    add_action( 'template_redirect' , 'custom_redirect' );

    これで動作しますでしょうか?

    トピック投稿者 pochi555

    (@pochi555)

    ご返信いただき誠にありがとうございます。
    複数のテストサイトで試したところ、あるサイトは正常に動作し、あるサイトでは機能しませんでした。
    機能しなかったサイトは、システムをプラグインで入れており、それが影響しているのではないかと思いました。
    functions.phpの優先順位などが影響かもしれませんが、どう修正すればよいか分かりませんでした。
    「Code Snippets」プラグインを使って、プライオリティを変更など試してみましたがダメでした。
    何か解決方法があれば良いのですが。。。

    あと、追加質問で申し訳ございません

    (1つ目)
    「特定のURL配下にアクセスした場合(https://aaaa.com/001/)※001ディレクトリ含む」とする時は、調べて以下のように「.*」を追加すればよいと思ったのですがダメでした。
    https://aaaa.com/001/.*’
    「特定のURL配下にアクセスした場合」の方法を知りたく存じます。

    (2つ目)
    初回質問と逆になると思いますが、
    ・特定の権限者(例:購読者)のみ、特定のURL配下(https://aaaa.com/001/)※001ディレクトリ含む、にアクセスできる
    ・他の権限者はリダイレクト(https://aaaa.com/)する

    上記方法もご存じでしたらご教授いただきたく思います。
    お手数ですがよろしくお願いいたします。

    こんにちは。
    『システムをプラグインで入れており』が何を意味するのかわからないので、解決方法は不明です。

    (1つ目)

    function custom_redirect(){
    	if( current_user_can( 'subscriber' ) ){
    		if( preg_match( '/^https:\/\/aaaa\.com\/001\//' , urldecode( get_permalink() ) ){
    			wp_redirect( 'https://aaaa.com/' );
    			exit;
    		}
    	}
    }
    
    add_action( 'template_redirect' , 'custom_redirect' );

    (2つ目)

    function custom_redirect(){
    	if( !current_user_can( 'subscriber' ) ){
    		if( preg_match( '/^https:\/\/aaaa\.com\/001\//' , urldecode( get_permalink() ) ){
    			wp_redirect( 'https://aaaa.com/' );
    			exit;
    		}
    	}
    }
    
    add_action( 'template_redirect' , 'custom_redirect' );

    これで動作するかと思います。なお、関数名は適宜変更してください。

    preg_match()については、
    PHP:preg_match – Manual
    正規表現については、
    【5分でまるっと理解】PHP正規表現の使い方まとめ
    PHP の正規表現の基本的な使い方
    正規表現チェッカー PHP: preg_match() / JavaScript: match()
    等をご参照ください。

    承認待ちになってしまいましたので、再度返信します。

    『システムをプラグインで入れており』が何を意味するのかわからないので、解決方法は不明です。

    (1つ目)

    function custom_redirect(){
    	if( current_user_can( 'subscriber' ) ){
    		if( urldecode( get_permalink() ) === 'https://aaaa.com/001/abc.html' ){
    			wp_redirect( 'https://aaaa.com/' );
    			exit;
    		}
    	}
    }
    
    add_action( 'template_redirect' , 'custom_redirect' );

    (2つ目)

    function custom_redirect(){
    	if( !current_user_can( 'subscriber' ) ){
    		if( preg_match( '/^https:\/\/aaaa\.com\/001\//' , urldecode( get_permalink() ) ) ){
    			wp_redirect( 'https://aaaa.com/' );
    			exit;
    		}
    	}
    }
    
    add_action( 'template_redirect' , 'custom_redirect' );

    これで動作するかと思います。なお、関数名は適宜変更してください。

    トピック投稿者 pochi555

    (@pochi555)

    ご返信いただき誠にありがとうございます。

    うまくいくサイトでは、ディレクトリ配下制限が(2つ目)の記述で動作し、「!」を付けるか、付けないかで、権限者にアクセスリダイレクト、あるいは許可を与えることができました。

    うまくいかないサイトでは、プラグインの影響があると思っておりますので、もう少し調べてみます。

    この度は大変助かりました。
    御礼申し上げます。

    (1つ目)はこちらでした。再返信の際に間違えたようです。

    function custom_redirect(){
    	if( current_user_can( 'subscriber' ) ){
    		if( preg_match( '/^https:\/\/aaaa\.com\/001\//' , urldecode( get_permalink() ) ) ){
    			wp_redirect( 'https://aaaa.com/' );
    			exit;
    		}
    	}
    }
    
    add_action( 'template_redirect' , 'custom_redirect' );

    解決したようで良かったです。

    トピック投稿者 pochi555

    (@pochi555)

    参照URLやご親切なご回答誠にありがとうございます。
    改めてお礼申し上げます。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「特定の権限者が特定のURLへアクセス時リダイレクト」には新たに返信することはできません。