web-dev-qa-db-ja.com

404ロジックを変更するフックはありますか?

テーマに404ページが定義されている場合、$ wp_query-> query_varsに "tag"が定義されていて、そのタグに一致する投稿がない場合、Wordpressは404ページを表示します。

私は投稿に加えて、各ページにいくつかの情報を表示するプラグインを書いています。タグ および に一致する投稿がない場合に404​​ページが表示されるように404ロジックを変更したいのですが、プラグインはそのタグに一致するデータを取得できません。プラグインがデータを見つけられる場合、そのページに投稿があるかどうかにかかわらず、通常のページを表示したいのですが….

私はグーグルで、コードを読んで、コーデックスを読んで、そしてあちこちを見回していて、そしてWordpressがどこでそれを引き起こすのか、そしてどうやってそれをオーバーライドすることができるのか理解できなかった。 (私はfunctions.phpのstatus_header()と関係があるかもしれませんが、どのようにしていつフックする必要があるのか​​明確ではありません)。

任意の助け/アイデア/悟りは認めました。

ありがとうございました、

〜パッチ

25
Patch

もう少しコードとグーグルを通した後、私は答えを見つけました。これは このスレッド に含まれています(Otto42の投稿を参照)が、記録としては、あなたのプラグインに以下を追加すると、指定した条件に対する404の処理が上書きされます。

add_filter('template_redirect', 'my_404_override' );
function my_404_override() {
    global $wp_query;

    if (<some condition is met>) {
        status_header( 200 );
        $wp_query->is_404=false;
    }
}

PHPがヘッダーを出力する前に "is_404"をfalseに設定する必要があることに注意してください。これをtemplate_redirectロジックにフックするのは良い考えです。

〜パッチ

27
Patch

私は常に200ページあるカスタムプロジェクトでも同じことをする必要がありました。そしてこれをテンプレートファイルの先頭に追加することもできます(get_header();の上)。

global $wp_query;
status_header( 200 );
$wp_query->is_404=false;
5
noinput

テーマに404.phpテンプレートファイルを作成し、必要に応じてカスタマイズします(プラグインの出力を追加するなど)。あなたは あなたのテーマで定義された について言及します、あなたにとってこのアプローチの全く間違っているものは何ですか?

コーデックス エラー404ページの作成

1
Rarst