WordPress – tvorba šablony od A do Z – 8.díl – Stránkování


V dnešním díle se podíváme na možnost stránkování příspěvků a jaké možnosti nám WordPress nabízí. Myslím, že vysvětlovat co je to stránkování asi nemusím, proto přejdu rovnou na věc a ukážu Vám několik funkcí, které nám v tom hodně pomohou. Chtěl bych jenom upozornit, že tyto wordpress funkce umí stránkovat pouze hlavní obsah wordpressu, který se jmenuje „post_type“. Základní typy máme – Příspěvek, stránka, obrázek, soubor. V dalších dílech si ukážeme, jak si zakládat vlastní.

Další příspěvek, předchozí příspěvek

Jedna z možností, jak udělat jednoduché stránkování je pomocí funkcí next_post_link() a podobně vypadajcí funkce previous_post_link(). Pokud tyto funkce budeme volat v single.php (v detailu příspěvku), funkce nám vygenerují odkaz na další příspěvek ve stejné kategorii a následně zpět na ten předchozí.

Jak to bude vypadat v našem single.php? Třeba následovně:

<?php get_header(); ?>
<div id="content">
        <?php if (have_posts()) : ?>
	   <?php while (have_posts()) : the_post(); ?>
		<h1> <?php the_title();?></h1>
		<?php the_content(); ?>
		<ul id="single-nav">
			<li class="prev"><?php next_post_link(); ?></li>
			<li class="next"><?php previous_post_link(); ?></li>
		</ul>
	   <?php endwhile; ?>
        <?php endif; ?>
</div> 
<?php get_footer(); ?>

Následně budeme mít v single.php dva linky, které nám budou schopny listovat po detailu příspěvku. To však ale ještě pořád není ono, že?

Stránkování číslo za číslem

Abychom docílili běžného efektu, kde vidíme číslice stránek a „šipky“ další a předchozí stránka třeba s 10 příspěvky, musíme použít od WordPressu jinou funkci. Na tuto část stránek nám WordPress připravil funkci paginate_links(), která vytvoří přesně to co potřebujeme. Je třeba ji jen trochu „nastavit“. Jak by tedy vypadal náš index.php se stránkováním?


<?php get_header(); ?>
<div id="content">
	<h1>Nějaký nadpis na titulní stránce</h1>
	<p>A třeba text na titulní stránce napsaný uživatelem.</p>

        <h2>Naposledy přidané články</h2>
        <?php if (have_posts()) : ?>
	   <?php while (have_posts()) : the_post(); ?>
		<?php get_template_part('loop', 'single'); ?>
	   <?php endwhile; ?>

	   <?php
	   		$big = 9999999;
			$args_page = array(
	    		'base' =>  @add_query_arg('paged','%#%'),
				'format' => '?paged=%#%',
				'current' => max( 1, get_query_var('paged') ),
				'total' => $wp_query->max_num_pages,
	    		        'prev_text' => __('Předchozí'),
				'next_text' => __('Další')
			);

			echo '<div id="strankovani">';
				echo paginate_links($args_page);
			echo '</div>';
	    ?>

        <?php endif; ?>

</div> 
<?php get_footer(); ?>

Část přidaného kódu a argumentů nám vytvoří linky s čísly na příslušné stránky, které bude do url předávat parametr, na které stránce se návštěvník právě nachází. Pro přehlednost kódu by ale bylo určitě lepší si do functions.php tuto část kódu nahrát do nějaké funkce a volat jenom funkci na místě, kde chceme stránkování používat.

Naše šablona se už skutečně stává použitelná jako běžný blog. Ale to nám rozhodně nestačí. V příštím díle se začneme věnovat vytváření vlastního typu obsahu, generování nových položek v admin prostředí, používání uživatelských rubrik, psaní formulářů pro administraci a mnoho dalšího.

Tomáš Kocifaj, KTStudio.cz

, , ,

  1. #1 Vita 26.3.2014 - 15:28

    Tak tady jsem se zasekl :/ div „strankovani“ se sice zobrazí, ale nenačte se do něj žádné stránkování. Mám tam tři testovací příspěvky. Nevím jak by to stránkování mělo přesně fungovat, jestli se zobrazí vždy, nebo jen když počet příspěvků překročí nějakou hranici?
    http://wordpress.kekorekture.cz/ … můj testovací web
    Pokud Vás něco napadá budu rád za info. Díky
    Super seriál, má smysl pokračovat ;)

    • #2 Tomáš Kocifaj 26.3.2014 - 15:33

      Zdravím tě, stránkování se načte pouze tehdy, pokud je co zobrazit na další stránce. Pro test si můžeš zkusit nastavit pouze jeden příspěvek na stránku :-) WP Administrace -> Nastavení -> Zobrazení.

      • #3 Vita 27.3.2014 - 07:03

        Díky, už to frčí.

  2. #4 mircolino 17.12.2014 - 13:30

    stránkovanie stránky
    Ahojte potreboval by som poradiť. Potreboval by som urobiť stránkovanie na bežnej stránke (nie u príspevkov ani u rubrík). Jedná sa o to, že na stránke mám už dosť pod sebou zoradené alba fotiek a tak by som chcel aby po určitom počte alb,bol dole odkaz na stránkovanie trebárs 1.2.3… Je to možné a ako? Vopred Vám ďakujem za odpoveď.
    mám WP 4.01

    • #5 Tomáš Kocifaj 17.12.2014 - 14:11

      Zdravím, pokud se ti jedná vyloženě pouze o stránkování fotografií, bude to trochu problém – WP tuto funkci vyloženě nemá. Zkus buď NextGen Gallery plugin, který má tuto funkci defaultně v sobě.

      Pokud bys to chtěl řešit přeci jenom přes WordPress, tak WP má funkci, pomocí které lze rozdělit stránku na více části pomocí tagu. Můžeš poté vytvořit vždy sadu fotek, ukončit „část“ stránky, zase sadu fotek a tak dále pokračovat.

      Více se o tom dočteš na Codexu:
      http://codex.wordpress.org/Function_Reference/wp_link_pages

      • #6 mircolino 29.12.2014 - 13:12

        Dík za odpověď použiti jiné galerií už bych nerad měnil (funkce a znalost ovládaní mého klienta ) Používám Photo Gallery https://wordpress.org/plugins/photo-gallery/
        Pokusím se ještě podívat na fórum Photo Gallery případně to vyřeším nějak jinak – vytvoření podstránek (archiv).

  3. #7 mKlaris 2.3.2015 - 17:41

    Zdravím,
    snažila jsem se Váš kód „číslo za číslem“ implementovat do mého kódu, ale bohužel nefunguje. I v nastavení zobrazení jsem nastavila počet článku 10 (na stránce jich mám mnohem více.

    v category.php mám kod:

    <a href="“>

    <?php the_content('Číst dále…‘); ?>

    Mohl byste mi prosím napsat jak tento kód upravím aby se zobrazilo stránkování? Předem Děkuji

    • #8 mKlaris 2.3.2015 - 17:42

      v category.php mám kod:

      <a href="“>

      <?php the_content('Číst dále…‘); ?>

    • #9 Tomáš Kocifaj 2.3.2015 - 17:45

      Dobrý den, omlouvám se, ale nemohu si nerýpnout :-) Z Vaší ukázky určitě vidím, že se nejedná o implementaci řádek po řádku. Úplně Vám chybí kód, který stránkování vytváří. Také nevidím WordPress loopu, která by příspěvky vypisovala. Ve funkci the_content() není potřeba zadávat parametr číst_dále – the_content() vždy vykreslí celý obsah.

      Obecné stránkování se vytváří pomocí funkce paginate_links(), kterou také v ukázce nevidím + její nastavení viz sepsaný článek a příklad.

  4. #10 mKlaris 2.3.2015 - 17:44

    • #11 Tomáš Kocifaj 2.3.2015 - 17:47

      Ano, to je o něco lepší – nicméně Vám stále chybí kompletní část kódu s použitím funkce paginate_links() – viz ukázka výše část: „Stránkování číslo za číslem“ – pokud se tedy jedná o category.php.

      • #12 mKlaris 3.3.2015 - 15:01

        Dobrý den,
        Kod jsem vám poslala bez implmentace vašeho kodu, protože tak jak jsem ho implementovala tak nefungoval. Když jsem se snažila kod znovu implementovat tak už se mi to podařilo :)

Komentáře jsou uzavřeny.