サポート » 使い方全般 » この$redirect_urlは事前に定義するものなのでしょうか?

  • functions.phpに設置した関数が読み込まれないと言う状況です。

    知りたいこと: 引数($redirect_url, $requested_url)は事前に取得、定義する必要があるのでしょうか?それともグローバル変数のような形で扱っているのでしょうか?

    function func_redirect_canonical($redirect_url, $requested_url) {
    	
    	$subject = $redirect_url;
    	$pattern = '/\/photos\//'; // URLに「/photos/」があるかチェック
    	preg_match($pattern, $subject, $matches);
     
    	if ($matches){
          //リクエストURLに「/page/」があれば、リダイレクトしない。
    		$redirect_url = false;
    		return $redirect_url;
       }
    }
    add_filter('redirect_canonical', 'func_redirect_canonical', 10, 2);
    

    参考にさせていただいているサイトにいくつも書かれているのですが、事前に取得しているのかわかりませんでした。
    参考1
    参考2
    参考3
    参考4

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • こんにちは

    読み込まれない、ということをどのように判断されているのか分かりませんが・・・

    ともかく $redirect_url には事前にリダイレクト先の URL がセットされた状態で関数が呼び出されます。

    このフィルターフックで false を返すとリダイレクトしなくなります。

    ところで、
    $subject = $redirect_url;
    の行は
    $subject = $requested_url;
    の誤りではないでしょうか。
    書かれているコードだと、リダイレクト先の URL に/photo/が含まれているかどうかを判定しています。
    リクエストされたURL は$requested_urlにセットされています。

    こんにちは

    “$redirect_url,” と “$requested_url” の間のスペースが、通常のスペースではない En Space (U+2002) になっています。これでは PHP エラーになるので機能しません。

    function func_redirect_canonical($redirect_url, $requested_url) {

    function func_redirect_canonical($redirect_url, $requested_url) {

    • この返信は3年、 1ヶ月前にishitakaが編集しました。理由: 間違え

    あと、最後に return がないので、これでは常にリダイレクトしなくなってしまいます。

    if ($matches){
      //リクエストURLに「/page/」があれば、リダイレクトしない。
    	$redirect_url = false;
    	return $redirect_url;
    }

    if ($matches){
      //リクエストURLに「/page/」があれば、リダイレクトしない。
    	$redirect_url = false;
    }
    return $redirect_url;
    トピック投稿者 tenra

    (@tenra)

    @munyagu
    コメントありがとうございます。
    指摘ありがとうございます、参考サイトのものがコメントアウトに残ってしまっていました。

    @ishitaka
    コメントありがとうございます。
    スペース,if文共に修正しました。ありがとうございます。

    現状以下を確認しました。

    フックの使い方1
    フックの使い方2

    現状としては下記のようにurlは変わりますが、存在しないURLと判断されてホーム画面に戻されてしまいます。
    https://hoge.com/photos/ -> https://hoge.com/photos/page_id=6

    このホーム画面に戻される部分が、自動補完リダイレクトによって起きていると考えています。
    これを防ぐために、redirect_canonicalフックを設定し防ごうと考えています。
    使い方(今の理解)は下記です。
    > キャンセルには FALSEを返し、リダイレクトを許可するには $redirect_url を返す。

    redirect_canonicalフックが効かず、ホームに戻されてしまう状態なので関数が読み込まれていないのかと仮説

    アラートを表示する形で試しましたが、表示されないといった状態です。

    無効化のフックを設置していますが、ホームにリダイレクトされるタイミングで呼ばれないため、ホームに戻ってしまう。
    redirect_canonicalフックが何らかの理由で呼べていない

    上記が現状と今の理解になります。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「この$redirect_urlは事前に定義するものなのでしょうか?」には新たに返信することはできません。