Napredne tehnike za debagovanje WordPress-a Idi do glavnog sadržaja

Napredne tehnike za debagovanje WordPress-a

Ako ste ikada pokušavali da otkrijete zašto vaš WordPress sajt ne radi onako kako bi trebalo, sigurno znate koliko to može da bude frustrirajuće. Neke greške se jasno prikažu i lako ih je prepoznati i popraviti. Sa druge strane postoje i one druge koje nije lako otkriti i koje ne daju nikakav vidljiv trag na ekranu.

Upravo tu na scenu stupa debagovanje, koje vam omogućava da sistematski pronađete i rešite uzroke problema, bez nagađanja i lutanja. Zato ćemo u ovom tekstu prestaviti neke napredne tehnike za debagovanje WordPress-a.

Ovaj vodič je namenjen svima koji žele da nauče kako da na jednostavan, ali efikasan način pronađu greške i nelogičnosti u radu svog WordPress sajta.

Ne morate biti programer da biste savladali ove tehnike. Dovoljno je malo pažnje i volje da pratite uputstva korak po korak.

WP debug modeprvi korak u debagovanju WordPress-a

Na početku je važno je da napomenemo da WordPress već ima ugrađen osnovni debug mode koji može da vam pruži veoma korisne informacije. On se aktivira tako što se u wp-config.php fajl dodaju određene konstante koje omogućavaju prikaz i beleženje grešaka.

O tome smo detaljno pisali u posebnom vodiču na našem blogu. Ukoliko želite da saznate više o tome pročitajte Kako da aktivirate debug mode u WordPress-u

Razumevanje osnovnog debug moda je prvi korak ka tome da u potpunosti ovladate dijagnostikom WordPress sajtova. Kada vam taj deo postane jasan, mnogo lakše ćete pratiti sve sledeće korake iz ovog vodiča.

Ne popravljajte u produkciji

Jedna od najčešćih grešaka početnika je da pokušavaju da rešavaju probleme direktno na produkcionom sajtu, tj. sajtu koji je već javno dostupan posetiocima. To je rizično jer čak i najmanja greška može izazvati pad sajta, prikaz grešaka krajnjim korisnicima ili probleme sa SEO-om – ako botovi indeksiraju pogrešne stranice.

Zato je prvi korak naprednog debagovanja da sebi obezbedite bezbedno okruženje za testiranje: prostor gde možete da eksperimentišete, menjate podešavanja i testirate rešenja, bez ikakvog rizika da pokvarite glavni sajt.

Postoje dva načina da to postignete:

  1. Aktiviranjem maintenance mode-a.
  2. Kreiranjem kopije vašeg sajta za testiranje.

Hajde da ih objasnimo redom.

Aktiviranje maintenance mode-a

Kada počnete da otklanjate probleme, dobra praksa je da privremeno uključite maintenance mode. Na taj način, umesto neučitanih stranica ili PHP poruka o greškama, vaši posetioci će videti jednostavno i uredno obaveštenje da je sajt trenutno u fazi održavanja.

Maintenance mode ne rešava problem sam po sebi, ali vam omogućava da radite u pozadini bez straha da će posetioci videti tehničke detalje, polovično funkcionalne stranice ili nebezbedne informacije.

Detaljno uputstvo kako da aktivirate maintenance mode već smo objasnili u posebnom vodiču na našem blogu: Maintenance mode i kako da ga aktivirate na WordPress sajtu.

Kreiranje kopije sajta

Još bolja i fleksibilnija opcija je da napravite kopiju vašeg sajta na kojoj možete slobodno da testirate promene i eksperimentišete.
U principu ovo možete uraditi na dva jednostavna načina:

  • na poddomenu (npr. test.mojdomen.co.rs), ili
  • na lokalnom računaru pomoću lokalnog servera.

Instalacija WordPress-a na lokalnom računaru je odličan način da radite potpuno izolovano, bez potrebe za internet konekcijom i bez rizika po glavni sajt. Ceo proces smo već objasnili u posebnom vodiču koji možete pratiti korak po korak: Kako da instalirate WordPress na lokalnom računaru (local server / localhost)

Kada jednom postavite svoje testno okruženje, možete na njemu slobodno da testirate teme, plugin-ove, kod i razne promene, a zatim tek proverena rešenja preneti na glavni sajt. Ovo je ujedno i profesionalna praksa koju koriste ozbiljni developeri i agencije.

Praktične tehnike naprednog debagovanja

Sada kada imate sigurno okruženje za testiranje i znate kako da uključite osnovni debug mode (WP debug), vreme je da pređemo na konkretne tehnike koje vam mogu pomoći da dublje analizirate probleme na svom WordPress sajtu.

Ove metode ne zahtevaju da budete programer, ali je važno da pažljivo pratite korake. Uglavnom se svode na dodavanje nekoliko linija koda u wp-config.php fajl, korišćenje jednostavnih alata i razumevanje šta vam WordPress zapravo poručuje kroz log fajlove.

Ukoliko želite da saznate više o wp-config.php fajlu, kao što je gde da ga pronađete ili šta sve sa njim možete da uradite, predlažemo da pročitate naš tekst Kako da pomoću wp-config.php kastomizujete svoj WordPress web sajt.

1. Logovanje specifičnih delova koda pomoću error_log()

Jedan od najjednostavnijih načina da uhvatite šta se dešava u nekom delu vašeg sajta jeste korišćenje PHP funkcije error_log(). Ona vam omogućava da ručno zapišete poruku u log fajl, tako da kasnije možete da je pronađete i analizirate.

Zamislite da imate funkciju za koju sumnjate da nešto ne radi kako treba, ali ne znate gde tačno. Na primer:

function my_custom_function( $data ) {

    // neka logika...

    return strtoupper( $data );

}

Ako želite da proverite da li ova funkcija uopšte radi, dovoljno je da dodate sledeću liniju unutar funkcije:

error_log( 'Pokrenuta je funkcija my_custom_function().' );

Kada posetite stranicu na kojoj se funkcija izvršava, u fajlu wp-content/debug.log pojaviće se ova poruka.

Još korisnije je da zapišete sadržaj promenljive koju funkcija obrađuje:

error_log( print_r( $data, true ) );

Funkcija print_r() pretvara sadržaj promenljive u čitljiv tekst, a drugi argument true sprečava da se rezultat ispiše na ekranu. Umesto toga šalje se u log.

Ova tehnika je izuzetno korisna jer vam omogućava da precizno pratite tok izvršavanja koda, posebno kada radite sa složenijim funkcijama, petljama ili podacima koji dolaze iz baze.

2. Aktiviranje SCRIPT_DEBUG za rad sa CSS i JavaScript fajlovima

Podrazumevano, WordPress koristi minifikovane verzije svojih glavnih CSS i JavaScript fajlova (to su fajlovi bez razmaka i nepotrebnih karaktera), kako bi se stranice učitavale brže. Međutim, kada pokušavate da otkrijete zašto neki skript ili stil ne radi kako treba, minifikovani kod je gotovo nemoguće čitati i analizirati.

Zbog toga WordPress ima konstantu SCRIPT_DEBUG koja, kada je uključena, tera WordPress da koristi verzije ovih fajlova: čitljive i kompletne.

Aktivira se dodavanjem sledeće linije u wp-config.php fajl:

define( 'SCRIPT_DEBUG', true );

Nakon što ovo dodate i osvežite stranicu, WordPress će umesto komprimovanih fajlova učitavati pune verzije, u kojima možete jasno da vidite gde se dešava greška (npr. u browser konzoli).
Kada završite sa testiranjem, obavezno vratite vrednost na false ili obrišite liniju kako ne biste usporili učitavanje sajta:

define( 'SCRIPT_DEBUG', false );

Ova tehnika je posebno korisna kada radite na prilagođenim temama ili kada neki plugin koristi sopstvene JS/CSS fajlove koji prave konflikt.

3. Praćenje SQL upita i problema sa bazom

Mnogi WordPress problemi dolaze upravo iz baze podataka. Bilo da je u pitanju loš upit, spor odgovor baze ili sintaksna greška. Srećom, WordPress ima ugrađene načine za jednostavno ispisivanje SQL grešaka.

Najbrži način je da u wp-config.php dodate sledeće:

$wpdb->show_errors();

Nakon što osvežite stranicu, WordPress će početi da prikazuje greške koje nastaju prilikom izvršavanja SQL upita. Ako želite detaljniji prikaz konkretnih grešaka, možete koristiti:

$wpdb->print_error();

Ovo je odličan način da brzo otkrijete, na primer, nepostojeće tabele, greške u upitima ili probleme sa konekcijom prema bazi.

Napredno praćenje upita sa SAVEQUERIES

Ako želite dublju analizu svih upita koje WordPress izvršava, možete uključiti i konstantu SAVEQUERIES. Ona beleži svaki pojedinačni SQL upit, vreme izvršavanja i funkciju iz koje je upit pozvan.

Dodajte u wp-config.php:

define( 'SAVEQUERIES', true );

Kada je ova opcija aktivna, svi upiti se čuvaju u nizu $wpdb->queries, koji možete pregledati pomoću print_r() ili kroz plugin Query Monitor (o kojem ćemo malo kasnije).

Napomena: SAVEQUERIES može značajno usporiti sajt, zato je koristite isključivo u testnom, odnosno lokalnom okruženju, i obavezno je isključite kad završite testiranje.

4. Privremeno isključivanje plugin-ova i tema

Ponekad je problem izazvan baš nekim plugin-om ili temom, ali nije odmah očigledno kojim. Jedan od najjednostavnijih načina da to proverite je da privremeno isključite sve plugin-ove, a zatim ih uključujete jednog po jednog.

Ako ne možete da pristupite WordPress admin panelu, uradite to preko FTP-a:

  1. Preimenujte folder wp-content/plugins u npr. plugins_old.
  2. Osvežite sajt. Ako proradi, znate da je problem u nekom plugin-u.
  3. Vratite folder na originalno ime i preimenujte jedan po jedan plugin dok ne pronađete onaj koji pravi problem.

Isto možete uraditi i za teme: ručno aktivirajte neku osnovnu WordPress temu (poput Twenty Twenty-Five) tako što ćete preimenovati folder trenutne teme i osvežiti sajt. Ako sajt proradi, znate da je problem u temi.

5. Korišćenje Query Monitor plugina

Još jedan sjajan alat za napredno debagovanje je besplatan Query Monitor plugin.
On vam omogućava da u realnom vremenu vidite detaljne informacije o tome šta se dešava ispod haube WordPress-a, uključujući:

  • sve SQL upite i njihovo trajanje,
  • PHP greške i upozorenja,
  • hook-ove i akcije,
  • skriptove i stilove koji se učitavaju,
  • HTTP pozive,
  • korisničke dozvole i još mnogo toga.

Nakon instalacije i aktivacije, Query Monitor dodaje novi meni u gornju admin traku WordPress-a. Klikom na njega otvara se panel koji prikazuje sve relevantne podatke, uredno podeljene po sekcijama.

Ovo je naročito korisno kada želite da brzo identifikujete:

  • koji plugin šalje previše upita bazi,
  • gde se tačno javlja PHP greška,
  • koji fajl usporava učitavanje stranice,
  • da li postoji konflikt između skriptova i stilova.

Query Monitor ne zahteva pisanje koda. Sve je prikazano u preglednom interfejsu, što ga čini savršenim alatom za početnike koji žele da nauče kako radi WordPress.

Napredne tehnike za dublju dijagnostiku

U prethodnim sekcijama upoznali ste osnovne i praktične metode za debagovanje WordPress sajta. Sada idemo korak dalje. Objasnićemo kako da koristite napredne alate i tehnike koji će vam omogućiti da precizno otkrijete i najskrivenije uzroke problema.

Sve što sledi i dalje je objašnjeno jednostavno, bez potrebe za programerskim iskustvom. Dovoljno je da pažljivo pratite korake i primenite ih u staging ili lokalnom okruženju.

1. WP-CLI komande za debagovanje

WP-CLI (WordPress Command Line Interface) je alat koji omogućava da upravljate WordPress sajtom preko komandne linije (terminala), umesto preko browsera. Možda deluje zastrašujuće na prvi pogled, ali u praksi je izuzetno koristan za brzo otkrivanje problema, naročito kada admin panel ne radi kako treba.

Primer: Ako želite da brzo proverite verziju WordPress-a i instalirane teme i plugine, ukucajte u terminalu:

wp core version

wp theme list

wp plugin list

Ako imate problem sa određenim pluginom, možete ga deaktivirati bez otvaranja browsera:

wp plugin deactivate naziv-plugina

Možete i ponovo aktivirati:

wp plugin activate naziv-plugina

Za prikaz svih grešaka koje WordPress trenutno beleži u bazi ili fajlovima:

wp eval 'var_dump( error_get_last() );'

2. WP_ENVIRONMENT_TYPE i dodatne konstante

Još jedna veoma korisna konstanta koju možete dodati u wp-config.php je:

define( 'WP_ENVIRONMENT_TYPE', 'development' );

Ona WordPress-u i pluginovima daje do znanja da je sajt u razvojnom (test) okruženju. Mnogi moderni pluginovi i teme prilagođavaju svoje ponašanje u zavisnosti od ove vrednosti, npr. prikazuju dodatne poruke, logove ili debugging opcije koje nisu vidljive u produkciji.

Dostupne vrednosti su:

  • development – razvojno okruženje
  • staging – testno okruženje
  • production – aktivni sajt

Na primer, ako radite lokalno i želite da budete sigurni da plugin ne šalje obaveštenja korisnicima, postavite okruženje na development. Kada završite sa radom i sajt prebacite na produkciju, promenite vrednost na production.

Uz ovu konstantu možete kombinovati i klasične debug konstante za dodatnu kontrolu:

define( 'WP_DEBUG', true );

define( 'WP_DEBUG_LOG', true );

define( 'WP_DEBUG_DISPLAY', false );

3. PHP error reporting i Xdebug

Pored WordPress-ovih alata, možete koristiti i PHP-ove sopstvene funkcije za prijavljivanje grešaka, koje vam daju još detaljniji uvid u problem.

Dodajte sledeće u wp-config.php (ili u php.ini ako imate pristup serveru):

error_reporting( E_ALL );

ini_set( 'display_errors', 0 );

ini_set( 'log_errors', 1 );

ini_set( 'error_log', __DIR__ . '/wp-content/php-errors.log' );

Ovim podešavanjima osiguravate da se sve PHP greške beleže u poseban fajl php-errors.log, a ne prikazuju posetiocima.

Xdebug za detaljnu dijagnostiku

Xdebug je napredna PHP ekstenzija koja omogućava dublje praćenje izvršavanja koda (step-by-step), profiling (merenja performansi) i vizuelno praćenje grešaka.

Za početnike, najkorisnija funkcija je stack trace. Kada dođe do greške, Xdebug tačno pokaže putanju kroz kod do mesta gde je greška nastala.

Instalacija Xdebug-a zavisi od vašeg lokalnog servera (XAMPP, Laragon itd.), ali kada ga jednom aktivirate, WordPress greške postaju mnogo razumljivije.

Primer stack trace-a može izgledati ovako:

Fatal error: Uncaught Error: Call to undefined function my_broken_function()

in /var/www/html/wp-content/themes/mojatema/functions.php:45

Stack trace:

#0 /var/www/html/wp-includes/class-wp-hook.php(308): my_theme_setup()

#1 /var/www/html/wp-includes/plugin.php(205): WP_Hook->apply_filters()

...

Iz ovog zapisa jasno vidite:

  • u kojoj datoteci i na kojoj liniji je greška (functions.php:45),
  • kroz koje funkcije je kod prošao do greške,
  • redosled poziva (stack trace).

4. Debugovanje REST API poziva

Mnoge moderne WordPress teme i plugin-ovi komuniciraju sa serverom preko REST API-ja. Ako nešto ne radi kako treba, a u browseru ne vidite klasične PHP greške, često se uzrok krije baš u ovim pozivima.

Najlakši način za početnike je da otvorite browser DevTools (F12 → tab Network) i osvežite stranicu. Pronađite REST zahtev koji ne radi (obično počinje sa /wp-json/), kliknite na njega i pogledajte:

  • Response – da li vraća JSON ili poruku o grešci
  • Status code – npr. 200 je u redu, 404 je nepostojeća ruta, 500 je serverska greška
  • Request headers i Response headers – korisno za autentifikaciju i cors probleme

Napredniji način je pomoću WP-CLI:

wp rest list

wp rest get /wp/v2/posts

Ili kroz Query Monitor plugin. Ima posebnu sekciju za REST pozive gde možete videti tačno koji plugin je registrovao koju rutu i da li je došlo do greške.

5. Hook-ovi i action-i – kada nešto prekida kod

WordPress koristi sistem hookova i akcija da bi različiti delovi koda mogli da komuniciraju međusobno. To je moćan mehanizam, ali ponekad baš neki hook može izazvati konflikt ili neočekivano ponašanje.

Primer: imate problem da se određeni deo koda izvršava prerano. Možete privremeno skinuti hook da biste testirali situaciju:

remove_action( 'init', 'moja_funkcija' );

Ako posle toga sajt proradi, znate da je upravo ta funkcija bila problematična.
Možete koristiti i has_action() da proverite da li je neka funkcija registrovana:

if ( has_action( 'init', 'moja_funkcija' ) ) {

    error_log( 'moja_funkcija je zakačena na init!' );

}

Query Monitor u ovom slučaju takođe pomaže tako što u posebnoj sekciji prikazuje sve aktivne hookove i funkcije koje su zakačene na njih.

6. Analiza i rotacija logova

Kada duže radite na debagovanju, log fajlovi mogu postati ogromni i nepregledni. Umesto da ih otvarate cele, možete koristiti jednostavne komande za pregled samo najnovijih linija.

Na Linux/Mac:

tail -n 50 wp-content/debug.log

Ova komanda prikazuje poslednjih 50 linija loga.
Ako želite da pratite log u realnom vremenu dok radite na sajtu:

tail -f wp-content/debug.log

Na Windowsu možete koristiti Notepad++ ili VS Code sa opcijom Auto Refresh ili jednostavno obrisati log pre testiranja, pa ga ponovo otvoriti posle.

Za organizovan rad, preporučuje se i rotacija logova. Periodično brisanje ili arhiviranje starih zapisa kako fajlovi ne bi postali preveliki. Možete jednostavno ručno preimenovati fajl debug.log u debug-old.log i pustiti WordPress da automatski napravi novi prazan fajl pri sledećem zapisu.

Zaključak

U ovom tekstu smo predstavili neke osnovne i napredne tehnike debagovanja. Početnicima ove metode mogu da deluju opširno, ali dobra vest je da ćete vrlo brzo steći rutinu. Sa svakim sledećim problemom, lakše ćete znati gde da pogledate i kako da reagujete.

Usput ne zaboravite da ključ uspešnog debagovanja leži u tome da:

  • uvek radite u sigurnom okruženju (na poddomenu ili lokalno),
  • beležite sve promene koje pravite
  • koristite prave alate za pravi tip problema

Kada ovo savladate, više se nećete osećati bespomoćno kada dođe do nekog problema u radu vašeg WordPress sajta. Znaćete tačno kojim redom da pristupite dijagnostici i kako da problem rešite kao pravi profesionalac.

Nenad Mihajlović


Ostavite odgovor