WordPress – tvorba šablony od A do Z – 14.díl – Vlastní stránky v adminu


Přicházím s dalším dílem o tvorbě vlastní WordPress šablony. Dneska se podíváme na to, jak si můžeme ve wordpressu založit vlastní stránku v levém admin menu a dodat do ní nějaký obsah pro uživatele. Velmi často se to používá pro nastavení šablony nebo pro prvky, které by měl mít možnost uživatel ovládat, ale WordPress pro Vaše věci nemá připravené formuláře. Jdeme na to !

Základní funkce pro založení stránky

Pro založení nové stránky v administraci WordPressu budeme používat funkci add_menu_page(). Funkce má poměrně dost parametrů, tak si je pojďme projít…

  • $page_title – Název stránky, které se bude zobrazovat v hlavičce stránky
  • $menu_title – Text, který bude zobrazen v menu vedle iconky
  • $capability – Přidání práv pro vstup do této stránky – více můžete najít na codexu wordpressu
  • $menu_slug – Parametr, který bude uveden v url při volání samotné stránky
  • $function – Funkce která se zavolá při otevření stránky – něco jako callback function
  • $icon_url – url na případnou iconku, která se v menu bude zobrazovat u textu
  • $position – a můžeme částečně ovládat i pozici naší stránky v celém menu

Jak bude tedy vypadat kód pro založení samotné stránky?

<?php
 add_action('admin_menu', 'add_page_nastaveni');

function add_page_nastaveni(){
	add_menu_page( 'Nastavení šablony', 'Nastavení', 'manage_categories', 'nastaveni' , 'show_nastaveni_page', 'http://www.mojedomena.cz/nejakej_img.png', 99 );
}
?>

Na první pohled se může zdát sada parametrů poměrně složitá, ale po rozklíčování jednotlivých parametrů zjistíte, že o nic složitého nejde. Co se nyní v našem WordPressu stane? V menu administrace nám vznikne nová stránka, která bude mít název „Nastavení“ a jako parametr v url se bude volat /wp-admin/admin.php?page=nastaveni. Při zadání této url se bude hledat a volat funkce show_nastaveni_page(). Tu ale zatím nemáme, jdeme to tedy změnit !

<?php
 add_action('admin_menu', 'add_page_nastaveni');

function add_page_nastaveni(){
	add_menu_page( 'Nastavení šablony', 'Nastavení', 'manage_categories', 'nastaveni' , 'show_nastaveni_page', 'http://www.mojedomena.cz/nejakej_img.png', 99 );
}

function show_nastaveni_page(){
	echo '<h2>Toto je naše stránka s nastavením</h2>';
	echo '<p>Mohu si sem vypsat nyní co chci a nebo volat další funkce či includnout nějakou templatu stránky!</p>';
}
?>

Námi založená stránka bude mít nyní vypsaný základní obsah. Do funkce můžete napsat nebo zavolat co budete chtít. Ideálně doporučuji založit si nový soubor, kde se napíšete html + php a ve funkci ho pouze includnete. Ale řešení je úplně na Vás.

Na začátku jsme se ale ještě zmínil i o možnosti podstránky

Založení podstránky je prakticky totožné, pouze máme jinou funkci a pár rozdílných parametrů. Funkce se jmenuje – add_submenu_page(). Jak vidíte, funkce jako taková má navíc jeden parametr a to $parent_slug, který říká, pod jakou stránkou bude podstránka zobrazena. V našem případě bychom použili ‚nastaveni‘. Substránky také nemají parametr $position, protože jejich pozice je dána stránkou hlavní. Stejně tak chybí $icon_url, podstránky již icon nemají.

Jak by tedy vypadal kód pro naší podstránku?

<?php
 add_action('admin_menu', 'add_submenu_page_for_nastaveni');

function add_submenu_page_for_nastaveni(){
	add_submenu_page( 'nastaveni' ,'Nastavení šablony - Template', 'Nastavení', 'manage_categories', 'template', 'show_nastaveni_subpage'); 
} 

function show_nastaveni_subpage(){
	echo '<h2>Toto je podstránka nastavení!</h2>'; 
	echo '<p>Mohu si sem vypsat nyní co chci a nebo volat další funkce či includnout nějakou templatu stránky!</p>';
 } 
?>
 

V tuto chvíli máme již založené dvě nové stránky, kam si můžeme dát libovolný obsah, formulář, výpis prvků, atd.

Závěrem dílu

Dneska jsem si ukázali, jak naší šablonu rozšířit o nové prvky a zachovat přehlednost WordPressu. Tyto stránky využívám například pro zakládání nových anket, přehled objednávek, statistiky a spoustu dalšího. Žádný pořádný vývojář nad WordPressem se bez toho dříve nebo později určitě neobejde.

Tomáš Kocifaj, KTStudio.cz

, , , ,

  1. #1 Lukenzi 1.8.2013 - 05:16

    Možná by se hodilo i uvést, že pokud stránku s nastavením includujete z jiného souboru musíte ji také ošetřit proti přímému načtení tohoto souboru v prohlížeči. Jinak postrádá smysl ji do administrace vkládat…

    Taky bych se asi i víc věnoval oprávnění pro zobrazení stránky, asi totiž není vhodné aby stránku s nastavením šablony vzhledu mohl zobrazit i uživatel v roli „Editor“ (manage_categories), všechna nastavení webu by měla být přístupná pouze administrátorovi webu a nikomu jinému.

  2. #2 Tomáš Kocifaj 1.8.2013 - 06:57

    Zdravím, díky za super komentář ! Určitě by se includované soubory měli ošetřovat, proti načtení z prohlížeče. Jedna z možností je .htaccess. Já osobně to dělám tak, že si ve svém drobném „frameworku“ definuji konstantu, kterou následně při volání souboru testuji.

    manage_categories jsem použil jako jednu z ukázek, těch přístupů a oprávnění má samozřejmě WordPress řadu a lze zakládat i své vlastní. Je na autorovi šablony, kolik uživatelů bude ve WP mít a komu všemu budou údaje dostupná.

    Vždy když dělám díl, tak se snažím ukázat úplně to základní, aby to bylo jednoduché a jasné. Občas na něco ale také zapomenu. Takže všem za komentáře tohoto typu děkuji.

  3. #3 Radek P. 2.8.2013 - 12:16

    Já bych se taky přimlouval za ukázku toho oprávnění. Možná jako další díl seriálu?

  4. #4 dakarin 17.2.2014 - 20:42

    Ve funkci „add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function );“ nám chybí pátý parametr „$menu_slug“ a odkazuje to jinam … možná je to posun verzí, ale spíš jen drobné opomenutí ;-)
    Jinak stále SUPER tutoriál :-)

  5. #5 Tomáš Kocifaj 18.2.2014 - 14:48

    Ahoj, díky za upozornění. Ano, máš pravdu, jeden parametr mi tam utekl – díky již opraveno ;-) Jsem rád, že to někdo opravdu čte! :-)

  6. #6 Vita 31.3.2014 - 21:43

    Zdravím, podle návodu nefunguje subpage a protože to taky opravdu čtu, tak i rovnou napíšu proč : prohozené $capability a $menu_slug ve funkci add_submenu_page(). Tak zítra mrknu na 15ku :)

    • #7 Tomáš Kocifaj 1.4.2014 - 05:49

      Zdravím, díky za upozornění – již opraveno.

Komentáře jsou uzavřeny.