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


27

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

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

私はグーグルでコードを読んで、コーデックスを読んで、ここを突っ込んでいますが、Wordpressがその404をトリガーする場所とそれをオーバーライドする方法を理解できませんでした。(functions.phpのstatus_header()に何か関係があるのではないかと感じていますが、いつどのようにフックする必要があるかは明確ではありません)。

任意のヘルプ/アイデア/啓発に感謝します。

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

〜パッチ

回答:


29

コードとグーグルでもう少し掘り下げた後、私は答えを見つけました。このスレッドに含まれています(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ロジックにフックするのは良い考えです。

〜パッチ


5

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

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

1
すばらしいです!これは私のために働いた。スクリプトを作成して404を生成しました。wp-> mainからrunnigスクリプトを試しましたが、これは非常にクリーンなソリューションではありませんでした。これは私のために働いた:// configuration require('./wp-load.php'); // init WP (inits objects, language and stuff). wp(); // fix title (this is not 404) $wp_query->is_404 = false; // doesn't fix the actual 404 status status_header( 200 ); // but this does :-)
Nux

1

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

Codex のエラー404ページの作成


私が探しているのは、404ページがトリガーされる状況を変更する方法です。現時点では、Wordpressがクエリ変数内のタグに一致する投稿を見つけられない場合、404ページが表示されます。Wordpressが投稿見つけることができず、プラグインが表示する補足情報を見つけることができない場合にのみ404ページが表示されるようにするコードをいくつか追加します。
パッチ

404の目的は、訪問者がリンクが間違っていることを知り、それをログに記録して修正することです(必要な場合)。あなたは訪問者に彼が壊れたリンクを使用していることを伝えたり、自分自身について気づかないようにしたくない。404で情報を表示することは問題なく機能し、ハイジャックは必須ではありません。ロジックや技術を把握しようとしています。
ラスト

1
私が探していたのは、「間違った」ページの定義を変更する方法でした。私が構築しているサイトにはブログコンポーネントがありますが、それだけではありません。Wordpressタグを使用して、Wordpressの投稿を表示し、プラグインを介して追加のコンテンツを取得しています。a)投稿があるか、b)プラグインがタグに一致するものを表示できる場合、200ステータスコードを返します。したがって、ロジックを再配線する必要があります。とにかく、答えを書くのに時間を割いてくれてありがとう-私の問題はもっと複雑な答えを必要とするほど奇妙でした:
パッチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.