WordPress – wymuszanie strony bez 404

Czasem bywa tak, że potrzebna jest w WordPressie mała zmiana w działaniu komunikatu o braku strony. Domyślnie WordPress po wykonaniu głównego zapytania odsyła nagłówek z kodem 404 i pokazuje szablon 404.php, ale można to ominąć i wymusić pokazanie jakiejś podstrony pomimo tego, że według WordPressa jest jakiś problem. Tak jest np. w przypadku niepowiązanego bbpressa i tagów z tematów. Nie wszystkie tagi będą miały odpowiedniki w postach, a przenoszenie powiązań i słów może być dość kłopotliwe.

Potrzebna będzie dodatkowa funkcja wpięta w functions.php:

add_filter('template_redirect', 'my_404_override' );
function my_404_override() { }

Wewnątrz tej funkcji dodajemy warunek jaki musi być spełniony do obejścia domyślnego błędu 404. W przypadku tagów będzie to:

if( !empty($wp_query->query_vars['tag']) && ($wp_query->is_404 == true) ) {

a następnie zaczynamy czarować:

status_header( 200 ); // nie ma błędu, wszystko jest ok

$klasa = new StdClass() ;
[...]
$klasa->term_taxonomy = "post_tag" ;

$wp_query->is_404=false; // nie było 404
$wp_query->is_tag=true; // jest tag w zapytaniu
$wp_query->queried_object = $klasa ; // obiekt używany do opisania danych, na których ma działać WordPress

W $klasa może być potrzebne ustawienie term_id, name, slug, term_taxonomy_id i count.

Po tych zmianach WordPress powinien zacząć pokazywać stronę tagu bez większych problemów.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*