_

I když už Wordpress nepoužívám, rozhodl jsem se, že zveřejním krátký článek a pár rad, jak si práci ve zmíněném redakčním systému usnadnit. Během deseti měsíců, kdy můj weblog poháněl Wordpress jsem zvládl přečíst spoustu řádků zdrojového kódu a našel odpovědi na některé otázky, které mě trápily. Jako první jsem řešil rychlost systému: jelikož webzdarma nepatří mezi nejrychlejší hostingy, můj prvotní průzkum funkcí směřoval právě tímto směrem. Připravil jsem si pro Vás pár jednoduchých návodů, jak WP znatelně zrychlit. A jelikož o mapu webu jsem se už podělil ve svém prvním článku na téma Wordpress, na konec přidám jen návod na lepší stránkování indexu.

Vše bylo testováno na Wordpressu 2.0.5 Anglické verzi. Před zásahem do kódu doporučuji soubory zazálohovat, stejně jako použít vždy raději komentář, nežli delete.

Funkce _e()

Funkce _e() má na starost přeložení argumentu do zadaného kódování a jeho následné vytisknutí. Předpokládám ale, že kódování jste si zvolili při instalaci systému a editaci Vašeho první skriptu. Já jsem ponechal implicitně nastavené UTF, a všechny soubory ukládal právě v tomto kódování. A protože nebyl důvod v budoucnu kódování měnit, překlad už nadále nebyl nutný. Řetězce tištěné funkcí _e() tedy můžete nahradit podle následujícího klíče:

<a href="http://wordpress.org/"><?php _e('Documentation'); ?></a>
<a href="http://wordpress.org/">Documentation</a>

Automatická náhrada řetězců

Druhý problém, který mi znepříjemňoval práci v administraci byla automatická náhrada řetězců, a to konkrétně při práci s HTML source editorem. Ten si doslova nahrazuje cokoli, co se mu zlíbí. Výsledkem je nafouknutí možných inline stylů, znemožnění používání některých formátovacích tagů a ukázek php kódu. Zkuste si napsat článek přímo v HTML source editoru s následujícími řádky a uvidíte kouzlo.

<p style="border: 1px solid black;"><b>zkouška</b></p>
<p><code><?php // nějaký php kód, který chci pouze zobrazit ?></code></p>

Na vyřešení svého problému jsem dlouho nemohl najít odpověď, než jsem narazil na diskusní fórum Česká poradna pro Wordpress, kde byly zodpovězeny všechny mé dotazy. Tímto bych chtěl také poděkovat moderátorům fóra za rychlé a věcné odpovědi.

Nejdříve v administraci vypneme TinyMCE a zakážeme automatickou opravu invalidního XHTML. Pak otevřeme soubor wp-includes/default-filters.php, najdeme následující řádky a zakomentujeme:

add_filter('the_content', 'convert_chars');
add_filter('the_content', 'wpautop'); 

Nyní už se nám zobrazí přesně to, co naťukáme do formuláře. Nevýhoda je ale odstranění všech automaticky doplněných odstavců, které musíme u starších článků manuálně doplnit.

Stránkování indexu

Neošetřené styly => nemožnost kliknout na odkaz v Opeře, zrcadlově převrácené odkazy vpřed / zpět a absence celkového počtu článků mě donutily k napsání vlastní funkce pro stránkování. Výsledek je podobný jako u RS2, či struktura odkazů, kterou můžete vidět tady u mě.

Otevřeme soubor wp-content/themes/default/index.php, najdeme řádky

<div class="navigation">
    <div class="alignleft"><?php next_posts_link('« Previous Entries') ?></div>
    <div class="alignright"><?php previous_posts_link('Next Entries »') ?></div>
</div>

a nahradíme vlastní funkcí. Ta je závislá na počtu článku zobrazovaných na úvodní stránce podle nastavení v administraci, a započítává pouze publikované články. Funkce přepokládá aktivní hezké url, v opačném případě je nutné změnit hodnotu proměnné $link z $link = ( $i == 1 ? '/' : '/page/'.$i.'/' ); na $link = ( $i == 1 ? '/' : '/?paged='.$i );

<?php
function strankovani()  { 
    $vyber = mysql_result(mysql_query("SELECT COUNT(`id`) FROM `wp_posts` WHERE `post_status`='publish' AND `post_type`='post'"), 0);
    $limit = mysql_result(mysql_query("SELECT `option_value` FROM `wp_options` WHERE `option_id` = 23"), 0);
    for  ($i = 1; $i <= ceil($vyber/$limit); $i++) {
        $link = ( $i == 1 ? '/' : '/page/'.$i.'/' );
        $last = ( $i*$limit>$vyber ? $vyber : $i*$limit );
        $or   = ( $i*$limit>$vyber ? '' : '|' );
        echo "<a href='".get_settings('home').$link."'>".(($i*$limit)-($limit-1))."-".$last."</a> $or ";
    }
}
?>

<p><strong>Pokračuj</strong>: <?php strankovani() ?></p>

A výsledek:

Pokračuj: 1-10 | 11-20 | 21-23

Doufám, že jsem těm z vás, kteří Wordpress používají svými pár radami alespoň trochu pomohl, a zpříjemnil práci se systémem stejně, jako kdysi sám sobě ;-)

# EDIT 5.4. 2008
Funkce stránkování upravena pro Wordpress 2.3.3 / 2.5

# EDIT 28.4. 2010
Jedná se o návod pro starou verzi Wordpressu, je pravděpodobné, že některé postupy se budou lišit.