Wie man einen 404 auf WordPress erzwingt
-
-
Aus den _bezogenen Fragen: _ http://wordpress.stackexchange.com/questions/73738/how-do-i-programmatisch-generate-a-404 - haben Sie dasgelesen?From the _related questions:_ http://wordpress.stackexchange.com/questions/73738/how-do-i-programmatically-generate-a-404 – did you read that?
- 0
- 2013-03-22
- fuxia
-
Ja,damitbekommeichimmernoch den Status "200".Yes, I still get a status `200` with that.
- 0
- 2013-03-22
- RRikesh
-
6 Antworten
- Stimmen
-
- 2013-03-24
Sie können die Wordpress-Funktion
status_header()
verwenden,um den HeaderHTTP/1.1 404 Not Found
hinzuzufügen.Ihr Code 2 -Beispiel wäre also:
function rr_404_my_event() { global $post; if ( is_singular( 'event' ) && !rr_event_should_be_available( $post->ID ) ) { global $wp_query; $wp_query->set_404(); status_header(404); } } add_action( 'wp', 'rr_404_my_event' );
Diese Funktion wirdbeispielsweisein diesem Teil verwendet:
function handle_404() { ...cut... // Guess it's time to 404. $wp_query->set_404(); status_header( 404 ); nocache_headers(); ...cut... }
aus der Klasse
wp
in/wp-includes/class-wp.php
.Versuchen Sie also,diesesmodifizierte Code 2 -Beispiel zusätzlich zu Ihrem
template_include
-Code zu verwenden.You could try the Wordpress function
status_header()
to add theHTTP/1.1 404 Not Found
header;So your Code 2 example would be:
function rr_404_my_event() { global $post; if ( is_singular( 'event' ) && !rr_event_should_be_available( $post->ID ) ) { global $wp_query; $wp_query->set_404(); status_header(404); } } add_action( 'wp', 'rr_404_my_event' );
This function is for example used in this part:
function handle_404() { ...cut... // Guess it's time to 404. $wp_query->set_404(); status_header( 404 ); nocache_headers(); ...cut... }
from the
wp
class in/wp-includes/class-wp.php
.So try using this modified Code 2 example in addition to your
template_include
code.-
Das von Ihnengepostete "Code 2" -Schnipselfunktionierteinwandfrei.Der `set_header ()`fehlte.The `Code 2` snippet you posted works perfectly. The `set_header()` was what was missing.
- 0
- 2013-03-25
- RRikesh
-
@birgire Sie verweisen auf "set_header ()",um "HTTP/1.1 404 Not Found" hinzuzufügen,haben aber "status_header ()"in Ihrem Code verwendet?@birgire you refer to `set_header()` to add `HTTP/1.1 404 Not Found` but have used `status_header()` in your code?
- 0
- 2014-09-08
- henrywright
-
@henrywrightes sieht aus wieein Tippfehler dort,ich habe die Antwort aktualisiert,danke ;-)@henrywright it looks like a typo there, I updated the answer, thanks ;-)
- 0
- 2014-09-08
- birgire
-
- 2013-03-24
Dieser Code hatbei mirfunktioniert:
add_action ('wp','force_404'); Funktionforce_404 () { global $ wp_query;//$posts (fallserforderlich) if (is_page ()) {//dein Zustand status_header (404); nocache_headers (); include (get_query_template ('404')); sterben(); }} }}
This code worked for me:
add_action( 'wp', 'force_404' ); function force_404() { global $wp_query; //$posts (if required) if(is_page()){ // your condition status_header( 404 ); nocache_headers(); include( get_query_template( '404' ) ); die(); } }
-
Praktisch.Ich suchenachbenutzerdefinierten Abfrageparametern,damitich die Aktionnicht verwende,aber sieisteine sehrnützliche Methodein meiner Plugin-Klasse.Handy. I'm checking for custom query parameters so I'm not using the action, but it makes for a very useful method in my plugin class.
- 0
- 2014-10-17
- John Reid
-
Fügen Sie Folgendes hinzu,um den Seitentitel zu korrigieren: `global $ wp_query;` $ wp_query->is_404=true; `Add the following to fix the page title: `global $wp_query;` `$wp_query->is_404 = true;`
- 2
- 2016-02-24
- developerbmw
-
- 2013-03-22
Ich würdenichtempfehlen,einen 404 zuerzwingen.
Wenn Sie sich Sorgen um Suchmaschinenmachen,warumnichteinfachein Meta "kein Index,kein Verfolgen" auf diesen Seitenerstellen undesmit robots.txtblockieren?
Diesistmöglicherweiseeine bessere Möglichkeit,die Anzeige von Inhalten zublockieren.
add_filter( 'template_include', 'nifty_block_content', 99 ); function nifty_block_content( $template ) { if ( is_singular( 'event' ) && !rr_event_should_be_available( $post->ID ) ) { $template = locate_template( array( 'nifty-block-content.php' ) ); } return $template; }
Sie könnten diese Methode wahrscheinlich auch zum Laden von
404.php
verwenden,aberichbin der Meinung,dass die Verwendungeiner Seitenvorlageeine bessere Option sein könnte.I wouldn't recommend forcing a 404.
If you're worried about search engines why not just do a "no-index,no-follow" meta on those pages and block it with robots.txt?
This may be a better way to block the content from being viewed
add_filter( 'template_include', 'nifty_block_content', 99 ); function nifty_block_content( $template ) { if ( is_singular( 'event' ) && !rr_event_should_be_available( $post->ID ) ) { $template = locate_template( array( 'nifty-block-content.php' ) ); } return $template; }
You could probably also use this method to load
404.php
but I feel that using a page template might be a better option.-
Vielen Dankfür den Link. Ich werde stattdessen auf "locate_template ()" umsteigen.Ich denke,dass `robots.txt.` keingarantierter Wegist,um vor Indexierung zu schützen.Einige Suchmaschinengreifenmöglicherweiseimmernoch auf die Seite zurück.Ichmöchte,dass die Seite wieeine normale 404-Seite aussieht.Außerdem werden die Beiträge dynamisch hinzugefügt. Das Bearbeiten der Datei "robots.txt"führt zu weiteren Problemen.Thanks a lot for the link, I'll switch to using `locate_template()` instead. I think that `robots.txt.` isn't a guaranteed way to protect from indexation. Some search engines might still pick up the page. I do want the page to look like a normal 404 page. Also the posts are going to be dynamically added, editing the `robots.txt` file will add more trouble.
- 0
- 2013-03-22
- RRikesh
-
- 2014-07-21
Meine Lösung:
add_action( 'wp', 'my_404' ); function my_404() { if ( is_404() ) { header("Status: 404 Not Found"); $GLOBALS['wp_query']->set_404(); status_header(404); nocache_headers(); //var_dump(getallheaders()); var_dump(headers_list()); die(); } }
My solution:
add_action( 'wp', 'my_404' ); function my_404() { if ( is_404() ) { header("Status: 404 Not Found"); $GLOBALS['wp_query']->set_404(); status_header(404); nocache_headers(); //var_dump(getallheaders()); var_dump(headers_list()); die(); } }
-
Das Umleiten auf Fehleristfür Ihr Seitenranking schrecklich.Zeigen Sieeinfacheine Vorlage am selben Ort wie diefehlerhafte Anfrage.Wenn Sie diestun,setzen Sie zunächsteinen 404,und die Umleitung ändertihn dann auf 301 oder 302,der dann aufeine Seite umleitet,die 200 zurückgibt. Diese wird dann von Suchmaschinen alsgültige Seiteindiziertist ausdrücklich das,was OP sagte,dassernicht wollte.Redirecting on errors is terrible for your page ranking. Just show a template at the same location as the bad request. What will happen when you do that is you initially set a 404, and then the redirect alters it to a 301 or 302, which then redirects to a page that returns a 200. That then gets indexed by search engines as a valid page, which is explicitly what OP said he didn't want.
- 1
- 2018-03-15
- mopsyd
-
- 2013-03-22
Statuscodes werdenin den Headern von HTTP-Anforderungengesendet.Ihre aktuelle Funktionistmit einem Hook verbunden,der zu spät aufgerufen wird.
Sie sollten versuchen,Ihre Funktion
rr_404_my_event()
in Aktionsend_headers
einzubinden.Ichbin mirnicht sicher,obes zu diesem Zeitpunkt überhauptmöglichist,die Post-ID zu überprüfen,aberprobieren Siees aus:
add_action( 'send_headers', 'rr_404_my_event' ); function rr_404_my_event() { global $post; if ( is_singular( 'event' ) && !rr_event_should_be_available( $post->ID ) ) { include( get_query_template( '404' ) ); header('HTTP/1.0 404 Not Found'); exit; } }
Status codes are sent in the headers of HTTP requests. Your current function is hooked into a hook that will be called too late.
You should try to hook your function
rr_404_my_event()
into actionsend_headers
.I'm not sure if at that point in time it's even possible to check the Post ID, but give this a go:
add_action( 'send_headers', 'rr_404_my_event' ); function rr_404_my_event() { global $post; if ( is_singular( 'event' ) && !rr_event_should_be_available( $post->ID ) ) { include( get_query_template( '404' ) ); header('HTTP/1.0 404 Not Found'); exit; } }
-
Ich habeeinige Syntaxfehler aus Ihren Codes korrigiert.Ichbekommenichteinmalmeine 404-Vorlage zum Laden damit.I corrected some syntax errors from your codes. I don't even get my 404 template to load with that.
- 0
- 2013-03-22
- RRikesh
-
Vielleicht könnten Siein Ihrer `404.php`eine andere` header.php` laden,z.` `um` header-404.php` zu laden.In diesem Header würden Sie "Header" ("HTTP/1.0 404 Not Found")im Abschnitt "" hinzufügen.Perhaps, in your `404.php` you could load a different `header.php`, e.g. `` to load `header-404.php`. In that header, you'd add `header('HTTP/1.0 404 Not Found');` in the `` section.
- 0
- 2013-03-22
- Marc Dingena
-
- 2019-10-04
Ich wolltemitteilen,wieich diemarkierte Lösung verwendet habe
function fail_safe_for_authors() { if ((is_user_logged_in()) && (is_author()) && ($_COOKIE["user_role"] !== "administrator")) { global $wp_query; $wp_query->set_404(); status_header(404); } } add_action("wp", "fail_safe_for_authors");
Ich habe diesgetan,um alle Benutzertypen vom Administrator zutrennen. In diesem Projekt kannnur der Administrator die Seite
author.php
sehen.Ich hoffe,es könntejemand anderem helfen.
I wanted to share the way I used the marked solution
function fail_safe_for_authors() { if ((is_user_logged_in()) && (is_author()) && ($_COOKIE["user_role"] !== "administrator")) { global $wp_query; $wp_query->set_404(); status_header(404); } } add_action("wp", "fail_safe_for_authors");
I did this to separate all user types from the administrator, in this project, Only the admin can see the
author.php
page.I hope it could help somebody else.
Ichmusseinigen Postsbasierend auf den Bedingungeneinen 404 aufzwingen. Ich habeesgeschafft (obwohlichnicht weiß,obiches richtiggemacht habe) undichbekommemeine
404.php
-Vorlage wieerwartet zu laden.Mein Code:
Code 2 von diese verwandte Frage - dasselbe Problem :
Mein Problem:
Obwohl gut aussieht,erhalteich den Status
200 OK
,wennich die Registerkarte Netzwerk überprüfe. Daes sich um den Status200
handelt,befürchteich,dass Suchmaschinen diese Seiten auchindizieren könnten.Erwartetes Verhalten:
Ichmöchte,dassein Status
404 Not Found
gesendet wird.