Muszę wymusić 404 na niektórych postach w zależności od warunków. Udało mi się to zrobić (chociaż nie wiem, czy zrobiłem to we właściwy sposób) i otrzymuję 404.php
szablon do załadowania zgodnie z oczekiwaniami.
Mój kod:
function rr_404_my_event() {
global $post;
if ( is_singular( 'event' ) && !rr_event_should_be_available( $post->ID ) ) {
include( get_query_template( '404' ) );
exit; # so that the normal page isn't loaded after the 404 page
}
}
add_action( 'template_redirect', 'rr_404_my_event', 1 );
Kod 2 z tego powiązanego pytania - ten sam problem:
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();
}
}
add_action( 'wp', 'rr_404_my_event' );
Mój problem:
Mimo, że wygląda dobrze, dostaję status, 200 OK
jeśli sprawdzę kartę sieci. Ponieważ jest to stan 200
, obawiam się, że wyszukiwarki mogą również indeksować te strony.
Oczekiwane zachowanie:
Chcę 404 Not Found
wysłać status .
200
z tym status .Odpowiedzi:
Możesz spróbować użyć funkcji Wordpress,
status_header()
aby dodaćHTTP/1.1 404 Not Found
nagłówek;Przykład Twojego kodu 2 to:
Ta funkcja jest używana na przykład w tej części:
z
wp
klasy w/wp-includes/class-wp.php
.Spróbuj więc użyć tego zmodyfikowanego przykładu Code 2 oprócz
template_include
kodu.źródło
Code 2
Snippet ty pisał działa idealnie. Tegoset_header()
brakowało.set_header()
dodać,HTTP/1.1 404 Not Found
ale użyłeśstatus_header()
w swoim kodzie?Ten kod działał dla mnie:
źródło
global $wp_query;
$wp_query->is_404 = true;
Nie poleciłbym forsowania 404.
Jeśli martwisz się o wyszukiwarki, dlaczego po prostu nie utworzysz meta „bez indeksu, bez śledzenia” na tych stronach i zablokujesz go za pomocą pliku robots.txt?
Może to być lepszy sposób na zablokowanie przeglądania zawartości
Prawdopodobnie możesz także użyć tej metody do załadowania,
404.php
ale uważam, że lepszym rozwiązaniem może być użycie szablonu strony.źródło
źródło
locate_template()
zamiast tego. Myślę, żerobots.txt.
nie jest to gwarantowany sposób ochrony przed indeksacją. Niektóre wyszukiwarki mogą nadal pobierać stronę. Chcę, aby strona wyglądała jak normalna strona 404. Również posty będą dodawane dynamicznie, edycjarobots.txt
pliku spowoduje więcej problemów.Moje rozwiązanie:
źródło
Kody stanu są wysyłane w nagłówkach żądań HTTP. Twoja bieżąca funkcja jest zaczepiona w haczyku, który zostanie wywołany zbyt późno.
Powinieneś spróbować podłączyć swoją funkcję
rr_404_my_event()
do działaniasend_headers
.Nie jestem pewien, czy w tym momencie można nawet sprawdzić identyfikator postu, ale spróbuj:
źródło
404.php
możesz załadować innyheader.php
, np .<?php get_header('404'); ?>
Załadowaćheader-404.php
. W tym nagłówku dodajeszheader('HTTP/1.0 404 Not Found');
w<head>
sekcji.Chciałem się podzielić tym, w jaki sposób korzystałem z oznaczonego rozwiązania
Zrobiłem to, aby oddzielić wszystkie typy użytkowników od administratora , w tym projekcie tylko administrator może zobaczyć
author.php
stronę.Mam nadzieję, że to może pomóc komuś innemu.
źródło