Speciální šablona pro konkrétní rubriku, stránku či příspěvek

Někdy se stane, že potřebujete v redakčním systému WordPress pro nějakou konkrétní kategorii, stránku či příspěvek zvláštní zobrazení – šablonu. Chcete třeba pro určitou rubriku odstranit nadpis, nebo nechat vypsat nějaký text navíc. K docílení tohoto efektu můžete použít složitý systém podmínek v php, nebo jednoduše vytvořit nový soubor (od WordPress 2.9). Jak tedy na to?

Řešení 1: WordPress template slug

Máte-li již existující šablonu, na které chcete provést změny (dejme tomu category.php  pro zobrazení výpisu rubrik), vezmete tento soubor a nakopírujete jeho aktuální obsah do nového souboru se speciálním názvem. Název souboru bude podle jednoho z následujících schémat:

(pokud ve vaší šabloně neexistuje soubor category.php, užijte soubor archive.php a pokud ani ten neexistuje, použijte index.php – déle uvedené názvy souborů se ale nemění v závislosti na názvu souboru s původním obsahem)

category-1.php (pro kategorii s ID 1)

category-nazev-kategorie.php (pro kategorii s názvem „Název kategorie“)

Obsah tohoto nově vytvořeného souboru si poté upravíte dle potřeby.

Obdobně lze vytvořit takto speciální šablony pro jednotlivé příspěvky (post-5.php či post-nazev-prispevku.php) i stránky (page-1.php či page-nazev-stranky.php).

Řešení 2: Custom templates for wordpress page

Přiřazení speciální šablony ke konkrétní kategorii, přípěvku či článku si už WordPress dále zařídí sám.

Pro stránky navíc můžete vytvořit speciální šablonu, která bude přístupná skrze administrační rozhraní při tvorbě či editaci stránky a můžete ji tedy užít pro více stránek na vašem webu. Opět vyjdeme ze základního souboru page.php, jehož obsah si nakopírujeme do nového souboru, nyní již s libovolným názvem. Na úvod (na úplně první řádek) tohoto .php souboru vložíte následující kód:

<?php
/*
Template Name: Nazev sablony
*/
?>

Upravíte si samozřejmě název šablony, který je zapsán za dvojtečkou. V našem případě jde o Nazev sablony (je rozumné nepoužívat při volbě názvu diakritiku, co kdy to někdy přeci jen zlobilo ;) )

Poznámka: Pro úpravu souborů můžete využít například Bluefish editor s nainstalovaným neoficiálním rozšířením pro podporu WordPress syntaxe a možností vložit již hotovou část kódu (mezi již hotovými kódy je i kód pro vytvoření nové šablony pro stránku): http://david.binda.cz/turn-bluefish-editor-into-powerful-wordpress-ide

Vlastní řazení výpisu rubrik ve widgetech i funkcích

Použití rubrik, respektive jejich výpisu častou používáme k vytvoření navigace. Funkce wp_list_categories() je snad každému tvůrci WordPress šablon známá. Tato funkce nám ovšem, stejně jako její „front-end“ ve widgetech, dává na výběr řazení dle následujících kritérií:

  • ID
  • name – Defaultní nastavení
  • slug
  • count
  • term_group

Vlastní řazení výpisu rubrik

Často by se nám ale hodilo vlastní řazení, ideálně takové, které si můžeme přizpůsobit. Od verze 3.0 máme ve WordPressu možnost vytvářet uživatelská menu, čímž lze toto vlastní řazení nahradit (O WordPress menu bude některý další příspěvek). Ovšem existuje také jednoduchý plugin – My Category Order -, který nám do navigačního menu v administraci do sekce „Příspěvky“ přidá položku „Pořadí rubrik“, kde si pořadí můžeme namixovat dle svých představ jednoduchým „drag & drop“ (tažením, jak se hezky česky překládá)

Tohoto pluginu můžeme poté využít ve widgetech. Sem již česká lokalizace nedorazila a tak máme k dispozici widget „My Category Order“ s volbou Order by: „My order“ zohledňující naše pořadí.

Ovšem jak již titulek napovídá, lze naše pořadí zohlednit i při použití funkce wp_list_categories() a to přidáním parametru ‘orderby=order’ (namísto například orderby=slug či orderby=name).

Nevýhody užití pluginu oproti řešení dle WordPress Menu

Jistou, i když drobnou a odstranitelnou, nevýhodou u tohoto postupu, oproti wordpress menu, je nemožnost tažením při sestavování pořadí, nějakou tu rubriku vyjmout (to při použití wordpress menu lze). Ovšem i rozhraní widgetu nabízí možnosti „Vyjmout“ (sem čeština dorazila) a „Exclude Tree“ (sem nedorazila :) ). Samozřejmě při použití funkce wp_list_categories() používáme analogicky ‘exclude=1,2′ a ‘exclude_tree=1′. Jak jsem již psal, při použití wordpress menu máme posléze možnost skrze administraci bez zásah do šablony jednoduše kategorie vyjmout. A není nutné to navíc, při použití jak ve widgetu tak v šabloně, nastavovat na dvou místech.

Poznámka: Rozdíl mezi ‘exclude’ a ‘exclude_tree’ – Při užití exclude se z výpisu vyjme jen a pouze kategorie s korespondujícím ID. Při použití exclude_tree se vyjme kategorie s korespondujícím číslem, ale také všechny její podkategorie (subcategories).

Ošetření pro případ nezapnutného pluginu

Použití tohoto pluginu v šabloně není navíc nutné ošetřovat pomocí function_exists() či is_plugin_active() funkcí. Pakliže plugin nebude aktivní, funkce wp_list_categories() v šabloně s nastaveným ‘orderby=order’ bude tento parametr ignorovat a výpis provede dle defaultní hodnoty parametru orderby ‘orderby=name’ (čili vypíše kategorie seřazené dle názvu).

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…

Interní prolinkování příspěvků a stránek

RB Internal Links
http://wordpress.org/extend/plugins/rb-internal-links/

Link to posts and pages within your blog using shortcodes, similar to a wiki or cms. No need to remember full URLs, post ids or slugs with the wysiwyg
As well as quickly typing in the link tag there is a tinymce wysiwyg plugin that allows you to search for posts by category.

*Alternativy:*

Link to post
http://wordpress.org/extend/plugins/link-to-post/

This plugin permits you to easily create a link to an existing content of your site. It adds a button to the tinymce and quicktags editors, which list the existing articles, pages, category, tags.

Na rozdíl od RB internal Links odkazuje Link to post absolutně (RB používá shortcode s ID stránky či postu) a nenabízí jako RB internal Links volbu odkazování do nového okna, RB internal Links zas neumí odkazovat na rubriky či tagy.

Hikari Internal Links
http://wordpress.org/extend/plugins/hikari-internal-links/

Don’t worry anymore of linking a post or a category, to later change its title or slug, or changing your posts permalinks, and creating invalid links to your own site pages.

Hikari Internal Links provides a shortcode that dynamically generates links to most WordPress resources. You can query these resources based on their ID or slug, and these links are generated dynamically. Therefore if you change a resource’s title or permalink, its links will be updated automatically.

Automatické prolinkování ze zadaných klíčových slov
***********

Internal Link Building

New SEO Plugin for WordPress: Internal Link Building

Pomocí tohoto pluginu lze jednoduše vkládat jednotlivá klíčová slova, která automaticky následně odkazují na určenou stránku či příspěvek.

*Alternativy:*

Automatic SEO Links
http://wordpress.org/extend/plugins/automatic-seo-links/

Forget to put manually your links, just choose a word and a URL and this plugin will replace all matches in the posts of your blog.
For each link, you can set: Title, Target, Rel.

Digg Links
http://wordpress.org/extend/plugins/digg-links/

With Digg Links you will be able to replace a word or sentence into another custom string.
Based on Link a Dink this plugin is ideal for affiliate marketing.

SEO Smart Links
http://www.prelovac.com/vladimir/wordpress-plugins/seo-smart-links
http://wordpress.org/extend/plugins/seo-automatic-links/

SEO Smart Links can automatically link keywords and phrases in your posts and comments with corresponding posts, pages, categories and tags on your blog.
Further SEO Smart links allows you to set up your own keywords and set of matching URLs. Caching for speed.

*Poznámka:*

Od verze WP 3.1. je ve vizuálním editoru přepracováno tlačítko pro vkládání odkazů, které nyní umí rychle vyhledávat obsah na webu a přímo automaticky vložit odkaz. Články jsou průběžně vyhledávány už během psaní klíčového slova a nová funkce není omezena jen na příspěvky, takže vidíte i stránky a případné další vlastní typy obsahu. Odkaz je ale bohužel vkládán do textu jako HTML kód, takže tam v této podobě zůstane, i když třeba adresu odkazovaného příspěvku později změníte. V tomto ohledu je praktičtější RB Internal Links, který vkládá odkazy pomocí ID stránek, příspěvků či rubrik.

Srovnávací tabulky

WP Comparison Charts
http://www.wpcomparisoncharts.com/

Umožňuje pohodlné vytváření srovnávacích tabulek produktů z vybraných příspěvků, ev. automaticky ze všech příspěvků v rubrice. Lze začlenit i uživatelská pole.
Srovnávací tabulky lze generovat jak v příspěvcích, tak ve stránkách. K dispozici je i modul pro import dat z CSV souborů.
Komerční plugin.

Price Table
http://wordpress.org/extend/plugins/pricetable/
http://siteorigin.com/pricetable-wordpress-plugin/

This plugin gives you a drag and drop interface for building price tables. It also renders those price tables using pure CSS3. They have a clean, minimal design.

Vkládání veřejných objektů z Facebooku na web

Chcete-li na svůj web vložit co nejjednodušším způsobem nějaký veřejný objekt (tj. obvykle z Facebook stránky, pozor – nikoli z osobního profilu!) typu: událost, stránka, fotoalbum, konkrétní fotografie, video, poznámka, nebo skupina) – hodí se vám plugin Embed Facebook. Ještě jednou zdůrazňuji, že fotky, videa či události z vašeho osobního účtu na web prostřednictvím tohoto […]

Vícejazyčný web

WPML Multilingual CMS
http://wpml.org/

Jednoznačný mercedes mezi jazykovými pluginy, opakovaně osvědčený (např. na Jetíkovi a Novatopu

Multilingual WordPress

WPML makes multilingual content management easy, just like running a site in one language.

Multilingual Features

– Turns a single WordPress install into a multilingual site.
– Built-in theme localization without .mo files.
– Comments translation allows you to moderate and reply to comments in your own language.
– Professional translation, connecting expert translators with site owners (optional, you can translate yourself for free).

CMS Navigation Features

– Includes CMS navigation elements for drop down menus, breadcrumbs trail and sidebar navigation.
– Robust links to posts and pages that never break.

Architecture (for geeks)

– Translations are grouped together and not mixed in the database.
– CMS navigation elements provide accurate and easy to use site-wide navigation.
– Simple CSS for easy customization. Try WPML’s CSS customization tool

!!! Při potřebě přebírat stávající obsah (custom fields, galerie) popis řešení zde .

*Alternativy:*

Polylang
http://wordpress.org/extend/plugins/polylang/

You write posts, pages and create categories and post tags as usual, and then define the language for each of them. The translation is optional. You can have as many languages as you want. You can translate posts, pages, media, categories, post tags, menus, widgets… Custom post types, custom taxonomies, sticky posts and post formats, RSS feeds and all default WordPress widgets are supported.

How to use »

xLanguage
http://wordpress.org/extend/plugins/xlanguage/

xLanguage is a full featured plugin allows you to blog in different language, and allows user to select which version to read. It works for blog post, page, tags, categories. The user language preferences will also select the right theme and plugins MO files.

Customization is the No. 1 design goal, after all that’s probably the reason why you want to setup a multilingual blog. The language configuration combination is highly customizable to facilitate multiple fallbacks. Every UI is extracted out, which could be optionally overridden by theme design without touching the plugin file at all.

qTranslate
http://wordpress.org/extend/plugins/qtranslate/
http://www.qianqin.de/qtranslate/

qTranslate supports infinite languages, which can be easily added/modified/deleted via the comfortable Configuration Page. All you need to do is activate the plugin and start writing the content!

qTranslate Plus
https://wordpress.org/plugins/qtranslate-xp/

qTranslate Plus is an unOfficial modified version of qTranslate (created by Qian Qin) created to be compatible with WordPress 3.9 or highter.

ZdMultiLang
http://wordpress.org/extend/plugins/zdmultilang/

– Translate posts ang pages
– Translate categories and tags
– Switch blog language
– Widget to change currently viewed language

Bogo
http://wordpress.org/extend/plugins/bogo/
http://ideasilo.wordpress.com/bogo/

Bogo is a straight-forward multilingual plugin for WordPress.
Assigns one language per post. Bogo does not create any additional custom table on your database, unlike some other plugins in this category. This design makes Bogo a solid, reliable and conflict-free multilingual plugin.

For custom post types add to function.php


function my_localizable_post_types($localizable) {
$localizable = array('post', 'page', 'mycustom_post');
return $localizable;
}
add_filter('bogo_localizable_post_types', 'my_localizable_post_types', 10, 1);

For your own language switcher in header.php:


$uri = $_SERVER["REQUEST_URI"];
$uri_array = split("/", $uri);
$uri_first = $uri_array[1];
$odkaz = ($uri_first == 'en') ? '<a href="..." title="Česky"><img src="cs.png"></a>' : '<a href="..." title="English"><img src="en.png"></a>';
echo $odkaz;

Transposh
http://wordpress.org/plugins/transposh-translation-filter-for-wordpress/

Transposh translation filter for WordPress offers a unique approach to blog translation. It allows your blog to combine automatic translation with human translation aided by your users with an easy to use in-context interface.

xili-language
https://wordpress.org/plugins/xili-language/

xili-language provides for a bilingual (or multilingual) website an automatic selection of language (.mo) in theme according to the language of current post(s) or page. Theme’s behaviour can be fully personalized through settings, hooks and api.

Multisite Language Switcher
https://wordpress.org/plugins/multisite-language-switcher/

A simple, powerful and easy to use plugin that will add multilingual support to a WordPress multisite installation, i.e. multiple subdomains or folders (if you need to set up multiple sites across multiple domains, you’ll also want to use the WordPress MU Domain Mapping plugin as well – as long as the domains are all hosted on the same server).

Ochrana proti odkazovému spamu

Bad Behavior
http://wordpress.org/extend/plugins/bad-behavior/

Bad Behavior complements other link spam solutions by acting as a gatekeeper, preventing spammers from ever delivering their junk, and in many cases, from ever reading your site in the first place. This keeps your site’s load down, makes your site logs cleaner, and can help prevent denial of service conditions caused by spammers.

Bad Behavior also transcends other link spam solutions by working in a completely different, unique way. Instead of merely looking at the content of potential spam, Bad Behavior analyzes the delivery method as well as the software the spammer is using. In this way, Bad Behavior can stop spam attacks even when nobody has ever seen the particular spam before.

Bad Behavior is designed to work alongside existing spam prevention services to increase their effectiveness and efficiency. Whenever possible, you should run it in combination with a more traditional spam prevention service.

Bad Behavior works on, or can be adapted to, virtually any PHP-based Web software package. Bad Behavior is available natively for WordPress, MediaWiki, Drupal, ExpressionEngine, and LifeType, and people have successfully made it work with Movable Type, phpBB, and many other packages.

Inpsyde AntiSpam
http://wordpress.org/extend/plugins/js-antispam/

Simple antispam solution. Scrambles a word and pieces it together automatically via JavaScript. Users with JavaScript enabled won’t notice anything. Those who have JavaScript disabled have to type the word into a textfield. This plugin won’t help against a targeted spam attack but should prevent a lot of random spam.

No remote service needed. Does not send or retrieve data from third party services.

Ochrana mediálních souborů (obrázků apod.) proti komentářovému spamu

Globální zákaz komentářů se překvapivě netýká mediálních souborů. Řešení je jednoduché:


add_filter( 'comments_open', 'noMediaComments', 10, 2 );
 
function noMediaComments( $open, $post_id ) {
$post = get_post( $post_id );
if ( 'attachment' == $post->post_type )
$open = false;
return $open;
}
?>
code

Zdroj »