404 ロジックを変更するフックはありますか?
質問
テーマに 404 ページが定義されている場合、$wp_query->query_vars で「タグ」が定義されており、そのタグに一致する投稿がない場合、Wordpress は 404 ページを表示します。
投稿に加えて、各ページにいくつかの情報を表示するプラグインを作成しています。タグに一致する投稿がない場合に 404 ページが表示されるように 404 ロジックを変更したいと考えています そして プラグインは、そのタグに一致するデータを取得できません。プラグインがデータを見つけることができたら、そのページに投稿があるかどうかに関係なく、通常のページを表示したいのですが...
グーグルで検索したり、コードを読んだり、コーデックスを読んだり、あちこち調べたりしましたが、Wordpress がどこで 404 をトリガーするのか、またそれをオーバーライドする方法がわかりませんでした。(functions.php の status_header() と何か関係があるのではないかと感じていますが、いつ、どのようにフックする必要があるのかは不明です)。
助け、アイデア、啓発をいただければ幸いです。
ありがとう、
~ パッチ
解決
もう少しコードを調べてグーグル検索した結果、答えが見つかりました。に含まれています このスレッド (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 ロジックにフックすることをお勧めします。
~ パッチ
他のヒント
常に 200 ページあるカスタム プロジェクトでも同じことを行う必要がありましたが、これをテンプレート ファイルの先頭に追加するだけでもよいことがわかりました (get_header(); の上)。)
global $wp_query;
status_header( 200 );
$wp_query->is_404=false;
作成する 404.php
テンプレート ファイルをテーマに追加し、必要に応じてカスタマイズします (プラグイン出力などを追加します)。あなたは言及しました テーマで定義されている, 、あなたにとってこのアプローチの具体的に何が間違っているのでしょうか?
コーデックス エラー 404 ページの作成