Správné ošetření použití pluginů a vlastních funkcí ve WordPress šabloně

Aneb

**Fatal error: Call to undefined function …**

Ačkoli WordPress nabízí v základu velmi slušnou škálu funkcí, jeho popularitu zvyšuje snad ještě větší množství pluginů, které práci se základním wordpressem buď „pouze“ zjednodušují či zpříjemňují, nebo dokonce rozšiřují.

Poznámka: asi nejlepším zdrojem pluginů je přímo na oficiálních stránkách wordpressu: http://wordpress.org/extend/plugins/

Mnoho tvůrců šablon či administrátorů webových stránek založených na WordPressu proto rádo sáhne po nějakém tom pluginu. Stáhnou jej, nahrají přes FTP do příslušného adresáře (pakliže nevyužijí možnost vyhledávání a instalace pluginu přímo z administrace wordpressu) a vloží nově přidanou funkci do šablony. Vše funguje tak jak má. Až do doby, kdy plugin deaktivují nebo upgradují na vyšší verzi, ve které plugin nefunguje. Poté se jejich stránka nezobrazí vůbec, nebo se zobrazí jen její část a poté chyba: „Fatal error: Call to undefined function ….“

To svědčí o tom, že tvůrce šablony řádně neošetřil užití pluginu. Jak na to? Hned si to vysvětlíme.

Ošetření pluginu pomocí function_exists()

Vezměme si pro demonstraci plugin Limit Post Add-on. Tento plugin nám rozšiřuje možnosti WordPressu o limit počtu slov při výpisu článku na hlavní stránce, archívech a rubrikách (samozřejmě jej lze užít i jinde). A dělá to jednoduše. Dle instalačních pokynů stačí nahradit funkci the_content(); funkcí the_content_limit(200, „continue…“); ( „5) Replace the_content(); with the_content_limit(200, „continue…“);“ )

To ale samozřejmě nestačí. Když šablonu vezmete a přenesete ji poté třeba na jinou instalaci wordpressu bez tohoto pluginu, nebo jej deaktivujete či jinak znemožníte jeho fungování, dostane se vám již zmíněného upozornění: „Fatal error: Call to undefined function the_content_limit„.

K ošetření tohot možného stavu použijeme nativní PHP funkci function_exists(). A sice takto:

<?php if ( function_exists(‘the_content_limit’) : ?>
<p><?php the_content_limit(200, ‘Continue…’);  ?></p>
<?php else : ?>
<p><?php the_content(); ?></p>
<?php endif; ?>

Všimněte si, že v kódu nejdříve otestuji existenci funkce the_content_limit a pakliže existuje, tak ji zavolám. Pokud ne, mám připravený tzv. fall-back (funkci, která se vykoná při selhání podmínky) na klasický the_content().

Poznámka: Fall-back je v tomto případě nepostradatelný. Pokud by došlo k deaktivaci pluginu, na stránce by se nevypsal žádný obsah! A to nechceme.

Ošetření pomocí plugin_is_active()

Na rozdíl od prvního řešení nyní využijeme „wordpressí“ funkci (funkce function_exists() je PHP nativní). Použití této funkce je vhodné v případě, kdy nevíme přesně, jaké funkce plugin vytváří a zpřístupňuje. Co ovšem musíme znát, je adresář ve kterém je plugin nainstalovaný a název php souboru pluginu (většinou jsou tyto názvy totožné).

<?php if ( is_plugin_active(‘adresar-pluginu/soubor-pluginu.php’) ) : ?>
//vykonáme požadované operace pro případ, že plugin aktivní je
<?php endif; ?>

Namísto adresar-pluginu přijde název adresáře (složky) ve které je plugin nainstalovaný. Nejedná se o složku „wp-content/pluigns“ ale o složku obsaženou právě v této složce. Cestu nezadáváme absolutní, ale relativní ke složce „/wp-content/plugins/“ a namísto „soubor-pluginu.php“ přijde název souboru pluginu (jak jsem psal, je většinou totožný s názvem pluginu s pomlčkami namísto mezer a také bývá totožný s názvem složky pluginu).

Takže do budoucna již žádné nepříjemné

Fatal error: Call to undefined function…