2017-09-21 16 views
0

ユーザーをリダイレクトしようとしています。 website.com/properties/property-titlewebsite.com/archive_properties/property-title URLが存在しない場合Wordpress - ページが存在しない場合にページをリダイレクトする

リダイレクト先のURLが実際にページである場合、次のコードが動作しています。ページが存在しない場合はエラーが表示されます。リダイレクト回数が多くなりURLが/archive_archive_archive_archive_archive_archive_archive_archive_archive_archive_archive_properties/property-titleに変更されました

ページが存在しない場合は通常の404ページだけ表示できますか?

add_filter('404_template', function($template) { 

    $request = filter_input(INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_STRING); 

    if (! $request) { 
     return $template; 
    } 
    $regex = [ 
     '/properties/' => 'archive_properties/$1', 
    ]; 

    foreach($regex as $pattern => $replacement) { 
     if (! preg_match($pattern, $request)) { 
      continue; 
     } 
     $url = preg_replace($pattern, $replacement, $request); 

     wp_redirect($url, 301); 
     exit; 
    } 

    // not our business, let WP do the rest. 
    return $template; 

}, -4000); // hook in quite early 

答えて

0

正規表現の値としてスラッシュを忘れている可能性があります。

'/properties/' => '/archive_properties/$1', 

編集:

だから、問題はあなたのpreg_replaceパラメータです。 $patternは区切られた正規表現で、/properties/と一致させる場合は、#をデリミネーターに使用すると#/properties/#になります。 $replacement/archive_properties/である必要があります。これは実際の文字列置換(正規表現ではない)です。

これは、その後、あなたはまた、URLだけで/propertiesで終わる場合の世話をする必要があります

​​

です。私はあなたがURIのための条件付きORチェックを行う必要があると思うし、それが本当であれば、ちょうど/propertiesを置き換えます。

+0

website.com/archive_propertiesに行くのではなく、/ archive_properties(Webサイトのアドレスを前にして)に移動します。 – nsilva

+0

あなたのREQUEST_URIに問題があります。 $ request varをダンプして実際の内容を確認します。 – TurtleTread

関連する問題