質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.03%

WordPressで404判定を回避したい

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,140

score 14

前提

下記「functions.php」のように、パーマリンクにリダイレクトをかけました。

これによって、
「example.com/country/japan/history/」へのアクセス時に、
「post-country-history.php」が読み込まれ、リダイレクトは正常に作動しています。

問題

しかしそのアクセス時に、下記「header.php」の処理において、if( is_404() ){}に該当してしまいます。
つまり'404です'という文字列がcookieに保存されてしまうのです。

実現したいこと

「example.com/country/japan/history/」のような、リダイレクト可能なページにアクセスしたときに、if( is_404() ){}に該当させない方法を知りたいです。

「functions.php」

こちらで、リダイレクトは正常に作動する状態です。

// リライトルールを指定
function rewrite_init() {
    add_rewrite_rule(
        '^country/([^/]+)/(history|character)?$',
        'index.php?country=$matches[1]&countrychild=$matches[2]',
        'top'
    );
}
add_action( 'init', 'rewrite_init' );

// 子ページのルールを追加
function rewrite_query_vars_perf( $query_vars ) {
    $query_vars[] = 'countrychild';
    return $query_vars;
}
add_action( 'query_vars', 'rewrite_query_vars_perf' );

// 子ページで使うテンプレートを指定
function rewrite_template_include_perf( $template ) {
    if ( get_query_var( 'post_type' ) == 'country' ) {
        $child = get_query_var( 'countrychild' );
        if ( $child == 'history' ) {
            $template = locate_template( 'post-country-history.php' );
        } else if ( $child == 'character' ) {
            $template = locate_template( 'post-country-character.php' );
        }
    }
    return $template; 
}
add_filter( 'template_include', 'rewrite_template_include_perf' );

「header.php」

リダイレクトは正常に作動する状態にも関わらず、下記の処理において、if( is_404() ){}に該当してしまうのが問題です。

<head>
    <?php
    if( is_404() ){
        echo "<script>$.cookie('page', '404です');</script>";
    }else{
        echo "<script>$.cookie('page', 'OKです');</script>";
    }
    ?>
    <?php wp_head(); ?>    
</head>

補足

「example.com/country/japan/history/」へのアクセス時が問題でして、
「example.com/country/japan/」は通常通りアクセスできます。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • CHERRY

    2019/07/22 10:53

    WP_Rewrite の不具合は、Webサーバーで、URL書き換えのログを記録するように設定して、URL書き換えのログを取って、WordPress 側で、` $wp_rewrite ` グローバル変数の中身をログに出力して、デバッグする必要があると思います。

    アクセスした URL から どのように URL が書き換えられて、どのように書き換えられたURLで、404 が発生するのかを追いかけないと原因特定は難しいと思います。

    キャンセル

  • sakurasakura

    2019/07/23 05:26

    @YukiYamashinaさま
    すみません、遅くなりました。何か複雑な問題が絡むようなので、別の方法をさぐることに致します。丁寧にご対応いただき改めて感謝申し上げます。ありがとうございます。

    キャンセル

  • sakurasakura

    2019/07/23 05:27

    @CHERRYさま
    デバッグの困難さに愕然ですwありがとうございました。別の方法で対応しようと思いました。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る