Czy istnieje sposób na wyświetlenie strony 404, jeśli bieżący zalogowany użytkownik nie ma odpowiedniej zgody na wyświetlenie strony? Szukam metody PHP, coś w tym rodzaju
if( !current_user_can('administrator') ) { show_404(); exit(); }
Myślałem o użyciu przekierowania, ale chciałbym zachować ten sam adres URL.
Odpowiedzi:
Byłem w stanie wyświetlić błąd 404, używając następującego kodu w nagłówku.
Aby to rozbić::
$wp_query->set_404()
informuje wp_query, że to jest 404, to zmienia tytułstatus_header()
: wysyła nagłówek HTTP 404get_template_part()
: wyświetla szablon 404źródło
http_status_code(404);
przed ustawieniem szablonu, aby upewnić się, że nagłówek jest poprawny (co jest znacznie szybsze niżstatus_header( 404 );
funkcja wordpress ). Jeśli martwisz się pozycją strony, powinieneś również umieścićDisallow
regułę w pliku robots.txt, aby wskazać, że nie jest to zasób publiczny.Dlaczego nie utworzysz strony z komunikatem o błędzie, a następnie przekierujesz użytkownika na tę stronę? Oto prosty sposób na osiągnięcie tego:
Otwórz
404.php
plik i dodaj do niego następujące wiersze:Utwórz stronę z
404 Page
szablonem. Następnie przekieruj użytkowników:Powodem, dla którego powinieneś użyć strony do żądania 404 jest: w WP 404 strona tak naprawdę nie istnieje , WP musi wyszukać całą jej zawartość przed zwróceniem strony 404, a ta praca jest marnotrawstwem zasobów. Korzystanie ze wstępnie skonfigurowanej strony, która może pomóc w szybszym prowadzeniu bloga.
źródło
http_response_code(404); exit();
. Jeśli chcesz stronę, użyjget_template_part( 404 );
przed wyjściem. Jest to również znacznie szybsze niż jakakolwiek funkcjonalność wordpress.Możesz napisać ten kod do pliku 404.php w faktycznie używanym katalogu motywów (wp-content / themes /..../ 404.php) :
Ten kod musi zaczynać się od początku pliku (bez żadnych znaków wcześniej) .
Link do oryginału: Jak przekierować stronę 404 na stronę główną w WordPress
źródło
Location: xxx
ustawia nagłówek 301, który informuje przeszukiwacze, że faktycznie istnieje prawidłowy zasób, i zabija twój ranking, gdy stwierdzą, że go nie ma.Miałem podobny wymóg, w którym nie powinienem zezwalać użytkownikom na dostęp do strony autor.php w zależności od roli, w której był użytkownik. Rejestruję akcję template_redirect w celu sprawdzenia i przekierowania na stronę 404 nawet przed załadowaniem strony.
Rejestracja:
Treser:
Jeśli zdecydujesz się używać tylko następującego fragmentu kodu w środku części szablonu, strona mogła już być częściowo renderowana i nie zostaniesz przekierowany na stronę 404. Więc lepiej to zrobić w
template_redirect
akcji -źródło