funkce wp_head() slouží ke spouštění akcí (actions), které musí být vykonány v hlavičce. Jde například o generování odkazů na styly pluginů. Bez této funkce by pluginy neměly šanci do hlavičky svůj kód procpat a nutily by, při instalaci, uživatele k úpravě hlavičky.
Samozřejmě je tato funkce také využívána wordpressem samotným ke generování kódu, který využívá. Někdy je tento kód užitečný a žádoucí, jindy ne. Když shledáte, že kód žádnoucí není, což je možné říci například o meta tagu “generator”, který komukoli bez skupulí oznámí verzi wodpressu. Toho pak může například využít potencionální útočník.
Pakliže chcete některé informace, které hlavička generuje odstranit, máte v zásadě dvě možnosti. Buď použít plugin, nebo přidat pár řádků kódu do functions.php.
Plugin Clean up wp_head
Řešením tohoto problému se zabývá plugin Clean up wp_head. Ke stažení zde: http://wordpress.org/extend/plugins/clean-up-wp-head/
Po nainstalování vám v sekci “Nastavení” přibude položka “Clean up wp_head”, kde si již jednoduchým zaškrtáváním navolíte co zobrazit a co ne.
Řešení skrze functions.php
Pakliže nejste fanouškem pluginů, máte omezené zdroje (php memory limit), chcete nastavení mít zakomponované přímo v šabloně pro snadný přenost na jiné servery a nebo k tomu máte jakýkoli jiný důvod, můžete využít úpravy souboru functions.php v adresáři vaší wordpress šablony. Pakliže vaše šablona tento soubor nemá, jednoduše jej vytvořte.
Příprava
K odstraňování zobrazených souborů využijeme funkci remove_action(). Seznam akcí, přiřazených funkci wp_head() je k nahlédnutí v souboru wp-includes/default-filters.php. Zde uvádím upravený výpis části tohoto souboru (odstranil jsem z posloupnosti řádky, které pro další výklad nejsou důležité):
add_action( 'wp_head', 'wp_enqueue_scripts', 1 ); add_action( 'wp_head', 'feed_links', 2 ); add_action( 'wp_head', 'feed_links_extra', 3 ); add_action( 'wp_head', 'rsd_link' ); add_action( 'wp_head', 'wlwmanifest_link' ); add_action( 'wp_head', 'index_rel_link' ); add_action( 'wp_head', 'parent_post_rel_link', 10, 0 ); add_action( 'wp_head', 'start_post_rel_link', 10, 0 ); add_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 ); add_action( 'wp_head', 'locale_stylesheet' ); add_action( 'wp_head', 'noindex', 1 ); add_action( 'wp_head', 'wp_print_styles', 8 ); add_action( 'wp_head', 'wp_print_head_scripts', 9 ); add_action( 'wp_head', 'wp_generator' ); add_action( 'wp_head', 'rel_canonical' ); add_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );
Snad jen pro úplnost dodám, že add_action má jako první parametr funkci, na kterou se má nová funkce pověsit (hook) (viz seznam takových funkcí ), poté název funkce, která se má pověsit (hook), poté prioritu nově přidávané funkce a počet parametrů funkce. To abyste se dokázali v kódu vyznat.
Samotné odstraňování
Když už víme, co všechno je na funkci wp_head pověšené (hooked), můžeme začít s odstraňováním toho, co nechceme zobrazovat.
K tomu nám, jak již bylo řečeno, slouží funkce remove_action(). Ta má stejné parametry jako funkce add_action(). A to je důležité. K odstranění již pověšené (hooked) funkce musíme zadat identické parametry priority a počtu argumentů funkce, jako byly zadány při přidávání této funkce pomocí add_action().
Takže co a jak odstranit. Zde je ukázka typického výstupu funkce wp_head() ze stránek david.binda.cz :
<link rel=”alternate” type=”application/rss+xml” title=”david.binda » Feed” href=”http://david.binda.cz/feed” />
<link rel=”alternate” type=”application/rss+xml” title=”david.binda » Comments Feed” href=”http://david.binda.cz/comments/feed” />
<link rel=”alternate” type=”application/rss+xml” title=”david.binda » Úvod Comments Feed” href=”http://david.binda.cz/uvod/feed” />
<link rel=”EditURI” type=”application/rsd+xml” title=”RSD” href=”http://david.binda.cz/xmlrpc.php?rsd” />
<link rel=”wlwmanifest” type=”application/wlwmanifest+xml” href=”http://david.binda.cz/wp-includes/wlwmanifest.xml” />
<link rel=’index’ title=’david.binda’ href=’http://david.binda.cz’ />
<link rel=’prev’ title=’Nabídka’ href=’http://david.binda.cz/nabidka’ />
<meta name=”generator” content=”WordPress 3.0.1″ />
No a zde je seznam remove_action funkcí odstraňující jednotlivé řádky tohoto výpisu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//odstraní odkaz (link) s parametrem rel = alternate odkazujícím na feed nejnovějších článků a komentářů remove_action( 'wp_head', 'feed_links', 2 ); //odstraní odkaz (link) s parametrem rel = alternte odkazujícím na speciální feeds (komentáře stránky v tomto případě, ale jde i o feed rubrik, štítků a podobně) remove_action( 'wp_head', 'feed_links_extra', 3 ); //odstraní odkaz (link) s parametrem rel = EditURI remove_action( 'wp_head', 'rsd_link' ); //odstraní odkaz (link) na wlwmanifest (Windows Live Writer) remove_action( 'wp_head', 'wlwmanifest_link' ); //odstraní odkaz (link) s parametrem rel = index remove_action( 'wp_head', 'index_rel_link' ); //odstraní odkaz (link) s parametrem rel = prev a rel = next (next není ve výpisu nahoře) remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 ); //odstraní poslední řádek, meta tag generator remove_action( 'wp_head', 'wp_generator' ); //odstraní odkaz (link) s parametrem rel = up (není ve výše uvedeném výpise) remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 ); //odstraní odkaz (link) s parametrem rel = start (není ve výše uvedeném výpisu) remove_action( 'wp_head', 'start_post_rel_link', 10, 0 ); |
Takže již víte, jak odstranit odkazy (link) generované funkcí wp_head(). Já osobně, kdybych měl něco odstraňovat, bych odstranil meta tag generator, odkaz na wlwmanifest a odkaz na Really simple discovery (EditURI). Zvláště pak, pokud pravidelně neaktualizujete a chcete si vaší instalaci WordPressu udržet v bezpečí.
Reference a další užitečné odkazy:
http://codex.wordpress.org/Function_Reference/remove_action
http://codex.wordpress.org/Function_Reference/add_action
http://codex.wordpress.org/Plugin_API/Action_Reference
http://core.trac.wordpress.org/browser/tags/3.0.3/wp-includes/default-filters.php
http://adambrown.info/p/wp_hooks – sezman všech wordpress hooks