プログラムで404を生成するにはどうすればよいですか?
-
-
おそらく、クエリを変更して、存在しないページを検索することができます.Perhaps I could modify the query to search for a non-existent page.
- 0
- 2012-11-23
- dave1010
-
ここで質問を明確にできますか?テーマの404ページでコードを実行しようとしていますか、それとも意図的に404エラーを作成しますか?Can you clarify the question here? Are you trying to run code on your theme's 404 page or do you intentionally want to create a 404 error?
- 0
- 2012-11-23
- Steve
-
404を作成したいのですが、質問を少し編集します...I want to create a 404. I'll edit the question a bit...
- 0
- 2012-11-23
- dave1010
-
どの場合/いつそしてなぜあなたは404ページを生成したいですか?in which case/when and why do you want to generate a 404 page?
- 0
- 2012-11-23
- fischi
-
私は少なくとも2つの異なる機会にこれを行う必要がありました.最近では、レガシーの著者ページに「404」を付けさせていました.それはまた、私が将来再び必要になると確信しているものでもあります.I've needed to do this on at least 2 different occasions. Most recently was making legacy author pages give a `404`. It's also something that I'm sure I'll need again in the future.
- 0
- 2012-11-26
- dave1010
-
3 回答
- 投票
-
- 2012-11-23
function generate_404_somehow() { global $wp_query; $wp_query->is_404 = true; } add_action('wp','generate_404_somehow');
もちろん、これですべてのページが404テンプレートに送信されます.これが発火するかしないかという条件はわかりません.
またはもっと注意する(コメントを参照)...
function generate_404_somehow() { global $wp_query; $wp_query->set_404(); } add_action('wp','generate_404_somehow');
function generate_404_somehow() { global $wp_query; $wp_query->is_404 = true; } add_action('wp','generate_404_somehow');
Of course, that will send all of you page to the 404 template. I don't know what the conditions are that this should fire or not fire.
Or to be more cautious (see comments) ...
function generate_404_somehow() { global $wp_query; $wp_query->set_404(); } add_action('wp','generate_404_somehow');
-
これは機能しますが、 `$ wp_query-> set_404()`は `$ wp_query->init_query_flags()`も実行し、他のすべての `is_ *`フラグをfalseに設定します.This works but `$wp_query->set_404()` also runs `$wp_query->init_query_flags()`, which sets all the other `is_*` flags to false.
- 0
- 2012-11-23
- dave1010
-
本当ですが、(非常に小さな)オーバーヘッドの必要性はわかりません.これがうまくいかない場合があるかどうか知りたいです.見つかりません.True, but I don't see the need for the (very minor) overhead. I would be interested to know if there is a case where this doesn't work. I can't find one.
- 0
- 2012-11-23
- s_ha_dum
-
`is_single()`や `is_archive()`のようなものがfalseを返すことを確認する必要があるので、それらをチェックするフックは正しく、404ページに余分なものを追加しません(「次へ」や「前へ」など)"リンク).ただし、これはプラグインとテーマによって異なります.I need to make sure that things like `is_single()` and `is_archive()` return false, so any hooks that check them are correct and don't add extra stuff to the 404 page (like the "Next" and "Previous" links). This depends on plugins and themes though.
- 0
- 2012-11-23
- dave1010
-
注意を理解しました.関数内で `$ wp_query-> set_404()`を使用すると、それをカバーできるはずです.それがあなたがやろうと決心したことだと思います.I understand the caution. Using `$wp_query->set_404()` inside my function should cover it. I assume that that is what you decided to do.
- 1
- 2012-11-23
- s_ha_dum
-
- 2019-08-01
もう1つのs_ha_dum回答では、HTTPヘッダーステータスが 404 Not Found に設定されていません.これを行うには、関数に
status_header( 404 )
を追加します.function generate_404_somehow() { global $wp_query; $wp_query->set_404(); status_header( 404 ); } add_action('wp','generate_404_somehow');
The other by s_ha_dum answers doesn't set the HTTP Header Status to 404 Not Found. To do this adds
status_header( 404 )
to the function.function generate_404_somehow() { global $wp_query; $wp_query->set_404(); status_header( 404 ); } add_action('wp','generate_404_somehow');
-
[`WP :: handle_404()`](https://developer.wordpress.org/reference/classes/wp/handle_404/)に見られるように、さらに `nocache_headers()`を追加することができます.You could additionally add `nocache_headers()` as seen in [`WP::handle_404()`](https://developer.wordpress.org/reference/classes/wp/handle_404/).
- 0
- 2019-08-01
- Nicolai
-
- 2012-11-23
うまくいくようです:
global $wp_query; $wp_query->set_404(); $wp_query->max_num_pages = 0; // stop theme from showing Next/Prev links
これにより、HTTPヘッダーが設定され、適切なテンプレートが読み込まれるようです(
is_404()
はtrueです).What seems to work:
global $wp_query; $wp_query->set_404(); $wp_query->max_num_pages = 0; // stop theme from showing Next/Prev links
This seems to set the HTTP headers and load the right template (with
is_404()
being true).
このようなものを機能させるにはどうすればよいですか?
基本的に特定の条件下で、ロードしようとしているテンプレート(ページやアーカイブなど)ではなく、404テンプレート(必要に応じて後でフックできます)を表示するようにWordPressに指示したいと思います.
存在しないページに
302
リダイレクトするだけでよいことはわかっていますが、それは非常に面倒です.404
HTTPヘッダーを手動で送信することもできますが、WPの素敵な404ページを使用できません(is_404()
にフックするものを取得する必要があります適切なタイミングで解雇されました.