Seznam souvisejících článků pomocí uživatelských polí ve Wordpressu
Custom fields neboli uživatelská pole umožňují Wordpressu (redakčnímu, zejména blogovací systému) stát se plnohodnotnějším (univerzálnějším) redakčním systémem, umožňují vkládat k příspěvkům a stránkám přídavné proměnné s určitými hodnotami. Na blogu justintadlock.com naleznete pár užitečných příkladů využití těchto uživatelských polí…
V tomto příspěvku jsem Vám přeložil příklad použití této funkce pro vytváření seznamu souvisejících článků, jež se zobrazí pod takové skupiny článků. Toto nám umožní jednoduše vytvářet skupiny souvisejících čláků, výsledek na obrázku níže…
Otevřte v editoru soubor v adresáři vaší šablony: “single.php”, najděte konec </div>, který zakončuje text článku. Toto se bude v různých šablonách lišit. Můžete náš kód vložit kam chcete mimo hlavní loop. Co to je loop se dočtete v dokumentaci WP. Můj kód leží mezi textem článku a před komentáři.
Vložte tento kód.
<?php // Zjistí jestli je článek v nějaké sérii
// Zjistí jméno série
$jmeno_serie = get_post_meta($post->ID, 'Jmeno serie', $single = true);
// pokud je článek v sérii
if($jmeno_serie!== '') {
// Echo nadpis výpisu
echo '<h3>Všechny články v sérii ' . $jmeno_serie . ' :</h3>';
Prvně tento kód zjistí, jestli je v nějáké sérii. Pokud ano, zobrazí se nadpisek výpisu, výpis bude následovat, pokud není, zbytek kódu se nevykoná.
Nyní potřebuje zadat požadavek na databázi speciálně pro vybrání přízpěvku ze stejné série, ze stejným jménem záznamu a hodnotou v uživatelském poli.
$query_string = " SELECT * FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) WHERE $wpdb->postmeta.meta_key = 'Jmeno serie' AND $wpdb->postmeta.meta_value = '$jmeno_serie' AND $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'post' ORDER BY $wpdb->posts.post_date ASC ";
Co zbývá je výstup v hezkém, uspořádaném seznamu. Používám k tomu neuspořádaný seznam <ul>, je možné samozřejmě použít třeba <ol>. Přidejte tento kousek kódu a je hotovo.
// List the posts $series_posts = $wpdb->get_results($query_string, OBJECT); if ($series_posts): echo '<ul>'; foreach ($series_posts as $post): echo '<li>'; ?> <a href="<?php echo the_permalink(); ?>" title="<?php echo the_title(); ?>"> <?php echo the_title(); echo '</a></li>'; endforeach; echo '</ul>'; endif; rewind_posts(); } // End check for series ?>
Tak to by bylo, nezapomeňte, že uživatelská pole rozlišují malá a velká písmena.
Modifikace
Pokud bychom chtěli zvolit různé titulky pro článek, jež se zobrazuje v tomto seznamu a jinde na blogu, například z důvodu, že titulky článků začínají Serie XY:… a chceme aby toto bylo opomenuto v našem seznamu, můžeme to udělat následujícím způsobem tak, že k článkům pomocí Uživatelských polí nadefinujeme dašlí hodnotu pro pole například: “Titulek seznam”, která bude zastupovat alternativní titule. Mezi “foreach ” a “endforeach” vložíme následující kód:
[code = "php"]
// zjistit titulek článku
$titulek_seznam = get_post_meta($post->ID, ‘Titulek seznam’, $single = true);
echo ‘<li>’; ?>
<a href=”<?php echo the_permalink(); ?>” title=”<?php echo the_title(); ?>”>
<?php if($titulek_seznam!== ”) echo $titulek_seznam; else echo the_title();
echo ‘</a></li>’;
[/code]
Poslední myšlenky
Nakonec poznámka: tato technika není z nejelegantnějších pro řešení seznamu článků série, existuje plugin In series, díky kterému můžete řadit články do sérií přes přívětivější uživatelské rozhraní a ani nemusíte upravovat Vaši šablonu… Tento článek však jistě dobře poslouží jako úvod do uživatelkých polí.
Pokud se zamyslíte nad systémem tohoto řazení můžete se ptát jaký má smysl vytvářet další a další varianty kategorizace, když můžeme články řadit již podle kategorií a tagů? Možná právě tagy by se dali elegantněji využít pro řazení podobných článků, nebo článků v sérii dohromady…


