ParseError: syntax error, unexpected. Jak opravit tuto WordPress chybu

Chyba ParseError: syntax error, unexpected obvykle znamená, že PHP narazilo na neplatný zápis v kódu. Nejčastěji v pluginu, šabloně (theme) nebo v souboru, do kterého jste něco nedávno vložili (např. functions.php, fragment z návodu apod.). Dobrá zpráva: ve většině případů ji opravíte během pár minut.

Jak chyba ParseError: syntax error, unexpected vypadá

Na obrazovce (nebo v error logu) uvidíte něco jako:

ParseError: syntax error, unexpected 'endif' (T_ENDIF) in /web/wp-content/themes/moje-tema/functions.php on line 123

Důležité jsou soubor a číslo řádku – to je místo, kde začněte.

Rychlá oprava ve 3 krocích (když se web hroutí)

  1. Přihlaste se přes FTP / správce souborů hostingu.
    Jděte do /wp-content/.
  2. Podezřelý plugin/šablonu dočasně vypněte přejmenováním složky.
    • Plugin: /wp-content/plugins/nazev-pluginunazev-pluginu.off
    • Šablona: /wp-content/themes/nazev-sablony → přepněte na výchozí (Twenty…); dočasně ji přejmenujte, WordPress sáhne po jiné dostupné.
  3. Ověřte načtení webu.
    Pokud web naskočí, příčina je v poslední změně (plugin, child theme, vložený kód). Pak opravte konkrétní soubor (viz níže), případně plugin/šablonu nahraďte čistou verzí.

Postup krok za krokem (systematická diagnostika)

1) Zjistěte přesné místo chyby

  • Z chybové hlášky si opište soubor a řádek.
  • Pokud se chyba nezobrazuje: v wp-config.php (v kořenové složce WP) dočasně zapněte diagnostiku:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);  // log do wp-content/debug.log
define('WP_DEBUG_DISPLAY', false); // skryje chyby z frontendu

Pak si otevřete /wp-content/debug.log a najděte poslední záznamy.

Nezapomeňte po opravě WP_DEBUG vypnout (na produkci nenechávejte).

2) Otevřete soubor a zkontrolujte syntaxi

Nejčastější chyby:

  • chybějící středník ;
  • neuzavřená závorka ) ] }
  • špatně vložené uvozovky ' nebo "
  • vložený kód PHP bez <?php ... ?>
  • cizí neviditelné znaky (BOM, “chytré uvozovky” z Wordu)
  • nesprávně zakončené podmínky/smyčky (endif;, endforeach;)
  • kód pro jinou verzi PHP (např. short closures fn() => na starším PHP)

3) Vraťte poslední úpravy / použijte čistý soubor

  • Pokud jste vkládali snippet do functions.php, dočasně ho zakomentujte nebo soubor nahraďte čistou verzí ze zálohy či balíčku šablony.
  • U pluginu zkuste čistou reinstalaci (složku pluginu smažte a nahrajte znovu).

4) Ověřte verzi PHP

  • Běžte do administrace hostingu a zkontrolujte, že používáte podporovanou verzi PHP 8.x (doporučena aktuální stabilní verze, kterou podporuje vaše verze WordPressu a pluginy).
  • Pokud chyba začala po upgradu PHP, vraťte se dočasně na předchozí minor verzi, opravte kód/aktualizujte plugin a poté znovu povyšte.

5) Konflikt pluginu nebo šablony

  • Vypněte všechny pluginy (rychle: přejmenujte /plugins/ na /plugins.off/), web otestujte, a pak je vracejte po jednom.
  • Přepněte do výchozí šablony (Twenty Twenty-…) – pokud web běží, problém je v původní šabloně/child theme.

6) WP-CLI (pokročilé, pokud máte)

# vypnutí všech pluginů
wp plugin deactivate --all
# přepnutí šablony
wp theme activate twentytwentyfour
# debug info
wp core version
wp plugin list
wp theme list

Nejčastější hlášky a co znamenají

Chybové hlášení (část)Co to obvykle znamenáJak opravit
unexpected T_STRINGNečekaný text – často chybí ; nebo uvozovkaZkontrolujte řádek a předchozí řádek, doplňte ;/uvozovky
unexpected ')' / '}' / ']'Přebytečná závorkaOdstraňte navíc vloženou závorku
unexpected end of fileSoubor končí uprostřed blokuDoplňte }/)/endif; apod.
unexpected 'endif' (T_ENDIF)Používáte endif; bez odpovídajícího if:Opravte styl zápisu nebo párování
unexpected 'echo' (T_ECHO)Příkaz na místě, kde se očekávala hodnotaUzavřete PHP bloky správně, opravte syntaxi
unexpected 'fn' (T_FN)Kód používá short closures a běží na starším PHPAktualizujte PHP nebo přepište funkci na function () {}
unexpected '=>' (T_DOUBLE_ARROW)Špatná syntaxe pole (např. chybí [ nebo ,)Zkontrolujte, zda pole začíná [ a prvky jsou oddělené čárkou
syntax error, unexpected '<'HTML vprostřed PHP bez uzavření ?>Uzavřete/otevřete správně PHP bloky

Příklady chyb a rychlá oprava

Chybí středník:

add_action('init', 'moje_funkce') // ← chybí ;
function moje_funkce() { ... }

Oprava:

add_action('init', 'moje_funkce');
function moje_funkce() { ... }

Neuzavřená závorka:

if (isset($x) && is_array($x) {
    // ...
}

Oprava:

if (isset($x) && is_array($x)) {
    // ...
}

Chytré uvozovky z Wordu:

echo “Ahoj svět”; // špatně

Oprava:

echo "Ahoj svět";

Prevence do budoucna

  • Editor kódu s kontrolou syntaxe (VS Code, PhpStorm).
  • Child theme – úpravy dělejte v child šabloně, ne v jádru.
  • Verzování (Git) a zálohy před každou úpravou.
  • SFTP místo webových editorů, které mohou přidat BOM/znaky.
  • Kompatibilita: před upgradem PHP zkontrolujte pluginy/šablony (changlogy, test na stagingu).

Moje řešení

Koupil jsem jeden web postavený na WordPress, který nebyl několik let aktualizovaný a při během aktualizace mi to hodilo tuto hlášku. Pokud se potýkáte s podobným problémem, podívejte se, jak to vyřešit.

ParseError thrown syntax error unexpected

Původní webhosting jel na historické verzi PHP 5.4 a po přepnutí na PHP 7.3 mi to vyhodilo přesně tuto chybu. Takže jsem to vrátil zpět a vše zaktualizoval, jak samotný WordPress, tak i pluginy a šablony.

Poté následně po přepnutí na to PHP 7 už vše fungovalo bez problémů.

Může se ale stát, že bude problém v některém pluginu, takže doporučuji jít postupně a ty, které opravdu nevyužijete (zde jich bylo snad 20), můžete s klidem smazat, nebo minimálně deaktivovat.

Často kladené otázky

Co přesně znamená „ParseError: syntax error, unexpected …“?

PHP narazilo na znak/klíčové slovo, které v daném místě nečekalo. Nejčastěji jde o chybu v interpunkci (středník, závorky, uvozovky) nebo o kód vložený do špatného místa.

Když hláška ukazuje na řádek 123, je chyba právě tam?

Ne vždy. Velmi často je na předchozím řádku (chybějící ; před řádkem 123 způsobí pád až na 123).

Jak chybu napravit, když se nedostanu do administrace WordPressu?

Přes FTP/správce souborů: přejmenujte složku problematického pluginu/šablony (deaktivuje se), opravte soubor, případně nahrajte čistou verzi.

Může to způsobit nekompatibilní verze PHP?

Ano. Kód využívající nové konstrukce (např. fn() =>) spadne na starším PHP. Řešením je aktualizace PHP nebo úprava kódu na kompatibilní syntaxi.

Pomůže přeinstalace WordPressu?

Obvykle není nutná. Problém bývá v konkrétním pluginu/šabloně nebo v poslední ruční úpravě. Přeinstalace jádra chybu v pluginu neřeší.

Kde najdu logy chyb?

Po zapnutí WP_DEBUG_LOG v wp-config.php se log zapisuje do /wp-content/debug.log. Další logy bývají v administraci hostingu.

Je bezpečné nechávat WP_DEBUG zapnutý na produkci?

Ne. Po dokončení diagnostiky jej vypněte – kvůli výkonu i bezpečnosti.

Odkazy

Přečtěte si ještě

About Miloš Lácha 1331 Článků
Počítače mě bavily odjakživa, takže 13 let práce administrátora v bance pro mě byl splněný sen. Prošel jsem mnoha školeními na Windows i Office a možná i to byl impuls založit tento web, kde už více než 10 let najdete pravidelně každý týden nové návody převážně pro operační systém od Microsoftu.

Buďte první kdo přidá komentář

Napište komentář

Vaše e-mailová adresa nebude zveřejněna.


*