Snadné stránkování bez pluginu

Pokud chcete své příspěvky ve WordPress stránkovat, musíte obvykle sáhnout po nějakém pluginu. Což rozhodně není ideální řešení. Stránkování obsahu je prostě základní funkce. Je škoda, že to WordPress neumí bez nějakého zbytečného pluginu!

Jenže on to umí. V administraci se stránkování obsahu používá téměř všude. Což mimo jiné znamená, že na to existuje funkce. Stačí ji tedy jen dobře použít:

$pagination = array(
	'base' => get_pagenum_link().'%_%',
	'format' => 'page/%#%',
	'total' => ceil($wp_query->found_posts / get_settings('posts_per_page')),
	'current' => absint( get_query_var( 'paged' ) ),
	'show_all' => false,
	'prev_next' => true,
	'prev_text' => __('« Previous'),
	'next_text' => __('Next »'),
	'end_size' => 3,
	'mid_size' => 5,
	'type' => 'plain',
	'add_args' => false,
	'add_fragment' => ''
);

echo paginate_links($pagination);

Funkce paginate_links má řadu vstupních parametrů, které jsou podrobně popsány v dokumentaci.

Nejdůležitější je samozřejmě total – měl by obsahovat počet stránek. Ten jsem vypočítal jako zaokrouhlený podíl celkového počtu příspěvku a počtu příspěvků na stránku (tohle se nastavuje se v administraci).

Parametr current by měl obsahovat číslo aktuálně prohlížené stránky. Zjistíte jej snadno pomocí get_query_var. Další dva neméně důležité parametry jsou base a format – pomocí kterých se tvoří URL odkazu.

Base by měl obsahovat základní část URL. Což je ta část, které se při procházení jednotlivých stránek nemění. Nenapadl mě lepší způsob, než zavolat funkci get_pagenum_link. Řetězec %_% bude při tvorbě URL nahrazen obsahem parametru format.

Format je ono samotné stránkování. Měl by obsahovat tu část URL, která se bude měnit. V mém příkladu využívám tzv. hezké URL. Takže číslo stránky je očekávané za page. Řetězec %#% bude nahrazen čísly. Výsledná URL tak bude vypadat například takto http://www.nabito.net/page/2

Ostatní parametry jsou spíš doplňkové.

Zvýraznění právě hledaných slov

Několik následujících řádků kódu obalí všechna právě vyhledávaná klíčová slova do značky STRONG (class search-keyword). Kód je možné vložit do function.php ve Vašem template. Nebo jej můžete vložit rovnou do search.php někde těsně za volání funkce get_header(). Předpokladem samozřejmě je, že využíváte standardních vyhledávacích funkcí WordPress.

function omSearchHeighlight($text)
{
$keys = explode(" ", get_search_query());
$text = preg_replace('/('.implode('|', $keys) .')/iu', '<strong class="search-keyword">\0</strong>', $text);
return $text;
}

add_filter('the_title','omSearchHeighlight');
add_filter('the_content','omSearchHeighlight');
add_filter('the_excerpt','omSearchHeighlight');

// nezapomeňte strong element nastylovat např.
// strong.search-keyword {background: #f3ff0f!important; color:#000!important;}

Výsledkem je malé, ale užitečné, vylepšení výsledků vyhledávání, které Vás navíc nestojí téměř žádnou námahu. Ještě malá poznámka na závěr: Kód nedbá na velikost písmen.

Odstranění části admin menu

WordPress není systém, který by nabízel přebujelé množství funkcí. Administrace je jednoduchá a přehledná. Přesto se občas může hodit, nějakou tu funkci natvrdo schovat před nenechavým klikáním zákazníka.

Celé administrátorské menu je uložené v souboru wp-admin/menu.php – do toho samozřejmě sahat nebudeme. Tento soubor nám postačí k tomu, abychom zjistili jak se menu tvoří. Menu je uložené ve dvou polích: $menu a $submenu. Obě tyto pole můžeme svobodně upravit, protože se jedná o globální proměnné. Svobodně upravit znamená například část vymazat. Úpravu těchto polí musíme samozřejmě stihnout před tím, než se pole použijí při vykreslování menu.

Do souboru function.php, který najdete ve wp-content/template/cokoliv, stačí přidat nový hook a funkci:

function edit_remove_menu() {
  global $menu, $submenu;
  unset($menu[25]); // odstraní z menu komentáře
  unset($menu[15]); // odstraní z menu odkazy

  // dale je mozne upravit také submenu
  unset($submenu['edit.php'][15]); // odstraní Příspěvky / Štítky
}

add_action('admin_menu', 'edit_remove_menu');

Na závěr malé upozornění, jednotlivé skryté funkcionality nadále fungují, pouze nejsou vidět v menu. Takže pokud znáte tu správnou adresu, můžete se k nim normálně dostat.

Přizpůsobení administračního rozhraní

White Label CMS
http://wordpress.org/extend/plugins/white-label-cms/

The White Label CMS plugin is for developers who want to give their clients a more personalised and less confusing CMS.
Allows customization of dashboard and logos, removal of menus, giving editors access to widgets and menus plus lots more.

White Label CMS allows you to remove all the panels from the WordPress dashboard and insert your own panel, which you can use to write a personalised message to your client and link to the important elements in the CMS.

It also allows you to add custom logos to the header and footer as well as the all important login page, giving your client a better branded experience of using their new website.

There is also the option to hide the nag updates as well.

*Alternativy:*

Web Editors CMS
http://wordpress.org/extend/plugins/web-editors-cms/

A collection of plugins that optimize WordPress 3 to use (and brand!) as a CMS. Includes our custom plugins and some extra’s. It is intended as an all-in-one package. Using this plugin in combination with the recommended plugins will turn WordPress into a perfect dream CMS tool that you can use for your customers. This plugin will let you know what other plugins to install. You will find the configuration settings in the „Settings >> Web Editors CMS“ menu.

This plugin is intended to make worpdress a CMS… something to dummy down the admin interface for your customers with you branded name it. We recommend a lot of plugins; setting user roles and knowing how to code PHP is really a must especially when using Pods. If this is not you then this plugin is probably not for you.
Features:

– Brand WordPress
– Customize Dashboard
– Add Permalink shortcodes into CMS
– Multiple content blocks
– Cleans up Messy Dashboard
– Easily edit pages from admin menu – Adds all pages in drop down of admin pages menu

WPlite
http://wordpress.org/extend/plugins/wplite/

Lets you hide ‚unnecessary‘ items from the WordPress administration menu—even the Dashboard. On top of that, you can also hide post meta controls on the Write page, so as to simplify the editing interface.

iMasters WP Hacks
http://wordpress.org/extend/plugins/imasters-wp-hacks/

A solution to personalize the WordPress admin to final users. Hide some widgets, show anothers, hide menu itens and controll what your client can see.

Custom Admin Branding
http://wordpress.org/extend/plugins/custom-admin-branding/

The Custom Admin Branding Plugin allows you to brand and customize the WordPress administration area for clients or for personal use. You can display custom images and styles for the login screen, admin header and footer.

Úprava administračního rozhraní pomocí actions a filters:**
http://sixrevisions.com/wordpress/how-to-customize-the-wordpress-admin-area/
http://loneplacebo.com/how-to-customize-wordpress-admin-area/

Viz též »

10 Techniques for Customizing the WordPress Admin Panel »

Údržbový mód

WP Maintenance Mode
http://wordpress.org/extend/plugins/wp-maintenance-mode/

Adds a maintenance-page to your blog that lets visitors know your blog is down for maintenancetime. User with rights for theme-options get full access to the blog including the frontend. Activate the plugin and your blog is in maintenance-mode, works and see the frontend, only registered users with enough rights. You can use a date with a countdown for informations the visitors or set a value and unit for infomrations. Also you can add urls for exlude of maintenance mode.

You can add your own html and stylesheet and add the url of this style to the options of the plugin.

Maintenance Mode Without Plugin


function wp_maintenance_mode(){
    if(!current_user_can('edit_themes') || !is_user_logged_in()){
        wp_die('<h1 style="color:red">Chystá se.</h1><br />Zkuste to později.');
    }
}
add_action('get_header', 'wp_maintenance_mode');

Dvě různé WordPress šablony na jednom blogu

Tento článek volně navazuje na můj předchozí článek s názvem: Speciální šablona pro konkrétní rubriku, stránku či příspěvek.

V něm je představeno řešení č. 1, kdy pro kategorii, příspěvek nebo stránku vytvoříme speciální šablonu pomocí tzv. template slugs, kdy vestavěná hierarchie užitích šablon, vždy nejdříve kontroluje o jaký obsah se jedná (například kategorie, stránka) a poté hledá existující šablonu v konkrétním pořadí.

Pro kategorii s názvem “Moje Kategorie” a s id=3 vypadá rozhodovací proces takto:

1) jde o kategorii? Ano
2) Existuje v šabloně soubor s názvem category-moje-kategorie.php? Ano, tak jej použij. Ne, bod 3
3) Existuje v šabloně soubor s názvem category-3.php? Ano, tak jej použij. Ne, bod 4.
4) Existuje v šabloně soubor s názvem category.php? Ano, tak jej použij. Ne, bod 5.
5) Existuje v šabloně soubor s názvem archive.php? Ano, tak jej použij. Ne, bod 6.
6) Použij soubor index.php (ten v každé šabloně musí existovat, a pokud neexistujte v child-template tak v parent template uričtě ano).

Problematiku demonstruje i obrázek umístěný v kodexu. Ten obsahuje rozhodovací procesy pro všechny druhy obsahu WordPressu.

Takže již víme, že pro vytvoření speciální šablony pro jednu konkrétní rubriku nám stačí nakopírovat soubor category.php (nebo archive.php či index.php – podle toho který v naší šabloně existuje) a přejmenovat jej buď do tvaru se slugem (čili názvem v pěkné url – s pomlčkami namísto mezer a bez diakritiky) a nebo s id. No a poté již můžeme upravovat či zcela od píky vytvářet speciální zobrazení.

Úprava hlavičky, patičky a sidebaru

No, ale co když chceme upravit také hlavičku, patičku či sidebar? Na to nám slouží parametr funkcí get_header(), get_footer() a get_sidebar().

Všem třem funkcím lze shodně přidat do jejich volání parametr s názvem, který poté zobrazí konkrétní soubor. Čili pokud chceme mít speciální šablonu pro hlavičku v naší template kategorie, upravíme volání funkce get_header(); v šabloně naší speciální kategorie. Třeba v souboru category-moje-kategorie.php.

<?php get_header('moje-kategorie'); ?>

Tato funkce bude hledat soubor s názvem header-moje-kategorie.php. Analogicky můžeme volat i další dvě zmíněné funkce:

get_footer('moje-kategorie'); //hledá soubor footer-moje-kategorie.php
get_sidebar('moje-kategorie'); //hledá soubor sidebar-moje-kategorie.php

Tím si můžeme zcela přizpůsobit výpis obsahu jedné konkrétní kategorie, stránky či příspěvku.

Snad jen jako poznámku pod čarou berte informaci, že pokud chceme rozdílné zobrazení homepage od kategorie či příspěvku, stačí vytvořit v šabloně soubory category.php a single.php a případně z nich volat jinou hlavičku, patičku a sidebar.

Něco jiného je když cheme vytvořit speciální šablonu pro stránku, která je volitelná z administrace. Ovšem tím jsem se již zabýval v předchozím článku.

Jak vytvořit speciální šablonu pro všechny příspěvky v jedné konkrétní kategorii rozebírám v jiném článku.

Speciální šablona pro všechny příspěvky v konkrétní kategorii

O různých zobrazení vybraných příspěvků, stránek a kategorií jsem napsal již dva články:

Speciální šablona pro konkrétní rubriku, stránku či příspěvek
Dvě různé WordPress šablony na jednom blogu

Pokud ale chceme pro všechny příspěvky v dané kategorii užít rozdílný layout, a vůbec jinou šablonu, se slug a id si moc nevystačíme. V tom případě budeme muset využít komplikovanější techniky.

Musíme si vytvořit “prakticky prázný” soubor single.php, který bude obsahovat pouze rozhodovací algoritmus. Na to využijeme WordPress funkce in_category() a php funkce include() ve spolupráci s WordPress konstantou TEMPLATEPATH.

Obsah bude následující (v případě, že chceme speciální šalonu pro příspěvky v rubrice speciální a moje kategorie):

<php 
if ( in_category( array('specialni', 'moje-kategorie' ) ) ) {
 include (TEMPLATEPATH.'single-specialni.php');
}else {
 include (TEMPLATEPATH.'single-normalni.php');
}
?>

Přičemž soubor single-normalni.php bude obsahovat původní obsah souboru single.php. Popřípadě, pokud do této doby neexistoval single.php, obsah souboru index.php. A soubor single-specialni.php bude obsahovat upravený kód vašeho speciálního zobrazení všech příspěvků v kategorii speciální a moje kategorie.

Pozor, soubor single-normalni.php a single-specialni.php musí obsahovat get_header() a get_footer(), jako každý jiný tradiční soubor WordPress šablony. Jen, dle tohoto článku, upravený soubor single.php tyto funkce obsahovat nesmí.

Jak vytvářet speciální hlavičky a patičky a sidebary jsem probíral v předchozím článku.