Co zrobić gdy nie działa funkcja wp_redirect?

Niejednokrotnie podczas pracy nad większymi wdrożeniami opartymi o WordPressa potrzebowałem skorzystać z funkcji wp_redirect by przekierować użytkowników, np. po wypełnieniu formularza. Niejednokrotnie też po próbie przekierowania otrzymywałem komunikat „Cannot modify header information – headers already sent…”. Jak sobie z tym poradzić?

Wystarczy w functions.php albo w plikach naszej wtyczki zamieścić następujący kod:

function output_buffer() {
 ob_start();
} 
add_action('init', 'output_buffer');

W 99% przypadków powinno to rozwiązać problem z przekierowaniami. Oczywiście należy pamiętać, by po wp_redirect użyć funkcji exit;.

By nie pozostawiać Was z samym kodem bez słowa wyjaśnienia, spróbuję jeszcze wytłumaczyć o co tutaj chodzi 😉 Zwyczajowo by funkcja wp_redirect() zadziałała, musimy ją wywołać, nim jakiekolwiek dane (najczęściej kod HTML) zostaną wysłane do użytkownika. W przeciwnym wypadku otrzymamy warning taki jak powyżej. Skorzystanie z funkcji ob_start(), która zostanie wywołana zaraz po załadowaniu WordPressa ale nim nagłówki zostaną przesłane (bo korzystamy z hooka init) włączy buforowanie, pozwalające na używanie wp_redirect w zasadzie w dowolnym miejscu naszego kodu.

Czy z zastosowaniem powyższego kodu wiążą się jakieś problemy? Cóż z tego co udało mi się wyczytać w komentarzach na stackoverflow (tak, korzystam ze stackoverflow, nie boję się tego powiedzieć! ;)) skutkiem ubocznym może być zwiększenie zużycia pamięci serwera a co za tym idzie spowolnienia ładowania strony.