Mapa webu by měla být nedílnou součástí každé webové prezentace. Její hlavní účel je pomoc ztraceným návštěvníkům najít na Vašem webu to, co hledají. Existuje také přesně daný XML formát pro mapy webů, který má svůj význam pro Google. 

Vygenerovat jednoduchou mapu webu není nic složitého, ovšem my blogeři to máme trochu složitější. Redakční systémy tuto funkci většinou nemají, a proto se musíme spoléhat na jiné, kteří už tento nedostatek vyřešili za nás. Sám jsem hledal nějaký plugin do Wordpressu, který by za mě vygeneroval mapu webu ve formátu XML. Struktura takového dokumentu je popsána na stránkách www.sitemaps.org.


Plugin jsem našel velice rychle, ovšem jeho implementace byla poněkud složitější - zkopírovaní souborů, jejich aktivace v administraci, a následná nefunkčnost celého skriptu :-) Nahlédl jsem tedy do zdrojového kódu a zděsil se - 40k skript, jehož výstup měl být něco okolo 1k. Takže jsem stisk tu krásnou klávesu s nápisem "Delete" a otevřel PSPad. Začal jsem studovat strukturu hlavních WP funkcí, které generovaly linky pro články, kategorie a archívy. Ani tam jsem ale moc nepochodil... Následovala chvíle přemýšlení, než mě napadla spásná myšlenka. Přihlásil jsem se tedy do PHPMyAdmina a blíže si prohlédl strukturu tabulek. Během půl hodiny (mezitím jsem si stihl ještě vypít kafe :) ) byl na světě jedno kilobytový skript, který uměl vypsat linky všech článků, feeds a kategorií. Takže ještě archívy... U archívů jsem ale narazil - v databázi prostě nikde žádná struktura, která by mi alespoň trochu napověděla, jak vypsat kategorie... Vrátil jsem se tedy zpět k funkcím WP.

Nakonec jsem 3 z nich zkopíroval do svého skriptu a redeklaroval. Tohle byla asi nejtěžší část, ale po jejím zvládnutí už se můžu pyšnit vlastní XML sitemap, a 5k skriptem, který ji generuje - což je o jednu nulu méně, než plugin, který měl to samé udělat za mě...

Mapa webu se skládá ze 2 souborů. Prvním je skript enter.php, díky kterému Vám budou fungovat základní WP funkce. Je to akorát zkopírovaný soubor wp-header.php, bez řádku pro načtení šablony. Tento skript používám právě k tomu, když potřebuji využít některé Wordpress funkce v externím skriptu, který jsem nevytvořil v administraci. Druhým souborem je pak samotná mapa webu. V něm stačí upravit pár řádků, a měla by fungovat i na jakémkoli jiném Wordpress weblogu. Co je potřeba upravit jako první, jsou vzájemné cesty mezi soubory, ke kterým přistupují funkce include a require. Já mám oba soubory v rootu.

$cat_priority = "0.8";
$cat_changefreq = "weekly";

$feed_priority = "0.6";
$feed_changefreq = "daily";

$post_priority = "0.9";
$post_changefreq = "monthly";

$archive_priority = "0.7";
$archive_changefreq = "monthly";

Dále si v souboru najděte následující řádky, a změňte si je podle svého - priorita a předpokládaný časová interval změny stránky. Jelikož se všude snažím používat původní WP funkce, mělo by vše fungovat hned od začátku. Pokud řádky nezměníte, budete mít akorát stejné priority jako já ;-)

Možný problém ale budou právě ty archívy. Struktura adres mých archívů vypadá následovně - například: http://mike.webzdarma.cz/2007/01/. Klič ke změně najdete hned v první funkci.

function get_month_link_for_sitemap($year, $month) {
    global $wp_rewrite;
    $archive_priority  = "0.7" ;
    $archive_changefreq  = "monthly" ;
   
    echo "".get_settings('home')."/".$year."/".$month."/".$archive_changefreq.$archive_priority;
 }

Pokud zápis zůstane původní, tzn. tak, jak ho mám já, funkčnost to nijak neovlivní. Pouze tam bude pár zbytečných odkazů navíc.