WordPress: Tryb debugowania

Spis treści

Gdy wprowadzamy sporo zmian na swoim blogu i nie mam tutaj na myśli dodawania/edytowania/usuwania postów, a jedynie przeróbki dotyczące zmiany wyglądu motywu czy też instalowanie i konfigurowanie nowych wtyczek, to istnieje spore prawdopodobieństwo, że gdzieś wystąpi jakiś błąd, który może zagrażać bezpieczeństwu całej witryny. Dlatego też warto wiedzieć, że WordPress posiada obsługę trybu debug, który może nam te wszystkie problemy z działaniem serwisu uwidocznić. Nie jest on jednak standardowo włączony, z oczywistych względów ale jeśli zajdzie taka potrzeba, to możemy sobie ten tryb debugowania aktywować i sprawdzić czy są jakieś błędy, ostrzeżenia czy też inne dodatkowe informacje, które mogą nam w jakiś sposób pomóc.

Aktywacja trybu debug

Jeśli mamy przeczucie, że coś dolega naszemu serwisowi ale nie mamy żadnych wizualnych komunikatów by potwierdzić te przypuszczenia, to nie wahajmy się i przełączmy się jak najszybciej w tryb debugowania. Odradzam jednak aktywowanie tej opcji w przypadku publicznie dostępnych stron www, z tym, że nie zawsze będziemy mieli możliwość postawienia swojego własnego środowiska testowego, gdzie będziemy mogli przeprowadzić wszystkie te niezbędne eksperymenty i czasem możemy zwyczajnie nie mieć innego wyjścia jak uruchomić tryb debug bezpośrednio na żywym organizmie.

Wszystkie poniższe parametry muszą pojawić się PRZED wystąpieniem /* That's all, stop editing! Happy blogging. */ w pliku wp-config.php .

Tryb debugowania w WordPressie aktywujemy za pośrednictwem pliku wp-config.php i mamy kilka opcji do wyboru. Najprościej dopisać w tym pliku poniższy kod:

// Enable WP_DEBUG mode
define( 'WP_DEBUG', true );

Odpowiada on za zwracanie komunikatów błędów, ostrzeżeń i innych dodatkowych informacji. Ponadto, za jego pośrednictwem, mogą zostać aktywowane także dwie dodatkowe opcje, tj. WP_DEBUG_DISPLAY oraz WP_DEBUG_LOG , z których pierwszy odpowiada za pokazywanie komunikatów bezpośrednio na stronie bloga, drugi zaś loguje je do pliku wp-content/debug.log. Domyślnie jednak tylko WP_DEBUG_DISPLAY zostanie włączony. Jeśli chcemy dostosować sobie odpowiednio te opcje, to zawsze możemy je dopisać do pliku wp-config.php :

// Enable display of errors and warnings
define( 'WP_DEBUG_DISPLAY', true );
@ini_set('display_errors',1);

// Enable Debug logging to the wp-content/debug.log file
define('WP_DEBUG_LOG', true);

Jeśli już musimy włączać tryb debugowania w środowisku produkcyjnym, to rozważmy chociaż aktywowanie jedynie tej drugiej opcji. Zadbajmy także o to, by odpowiednio ukryć sam plik logu, bo standardowo jest on dostępny publicznie i każdy będzie mógł go sobie przejrzeć wywołując, np. w przeglądarce, adres z doczepioną ścieżką wp-content/debug.log .

Pamiętajmy też, że nie wszystkie komunikaty muszą od razu oznaczać, że z serwisem dzieje się coś niedobrego, bo przecież WordPress podlega nieustannym zmianom i wprowadzane są nowe (oraz przerabiane stare) rozwiązania. Dlatego też, sporo komunikatów może dotyczyć przestarzałego kodu, który w późniejszych wersjach WordPressa zostanie usunięty na dobre i jeśli tego typu informację ujrzymy na swoim blogu, to prawdopodobnie będziemy musieli uaktualnić używany theme bądź też jakiś plugin ale w tym konkretnym momencie wszystko będzie działać jak trzeba.

Jeśli planujemy modyfikować szereg wbudowanych w WordPress skryptów JS lub stylów CSS, to przyda nam się również opcja debugowania tego typu kodu. Odpowiada za nią inny parametr, bo przecie zwykle administratorzy nie ingerują w rdzenny kod WordPressa. Tak czy inaczej, by mieć możliwość sprawdzenia czy wszystko i w tej kwestii jest w porządku, dodajmy do pliku wp-config.php poniższy kod:

// Use dev versions of core JS and CSS files (only needed if you are modifying these core files)
define( 'SCRIPT_DEBUG', true );

Dzięki niemu zostaną załadowane pełne wersje skryptów i stylów z katalogów wp-includes/js , wp-includes/css oraz wp-admin/js , a nie ich minimalistyczne wersje, czyli te z .min. w nazwie.

Debugowanie zapytań bazy danych

Jak widzimy wyżej, jeśli chodzi o debugowanie błędów kodu WordPressa, to mamy spore możliwości. Warto też wiedzieć, że istnieje opcja podejrzenia zapytań kierowanych do bazy danych, tj. tego jak skrypt WordPressa rozmawia bezpośrednio z bazą. Możemy w ten sposób prześledzić ile zapytań zostało wysłanych podczas ładowania się strony, oraz treść każdego z nich. Jeśli chcemy obejrzeć sobie te zapytania, to dodajemy do pliku wp-config.php poniższy kod:

// Save the database queries
define( 'SAVEQUERIES', true );

Zapisane w ten sposób zapytania będą przechowywane w tablicy $wpdb->queries ale by zostały one nam jeszcze pokazane, to musimy w stopce używanego przez naszą witrynę motywu dodać poniższą zwrotkę:

<?php
if ( current_user_can( 'administrator' ) ) {
    global $wpdb;
    echo "<pre>";
    print_r( $wpdb->queries );
    echo "</pre>";
}
?>

Jak widać wyżej, mamy tam warunek, by te zapytania zostały pokazane jedynie użytkownikom, którzy mają status administratora witryny. Poza tym, lepiej nie włączać tej opcji jeśli jej nie potrzebujemy, bo dość poważnie spowolni działanie całego serwisu.

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.