Jak získat příspěvek s určitým štítkem ve WordPress

  Návody

Existuje řada řešení jak získat příspěvek s určitým štítkem. Záleží jestli jste uživatel a potřebujte jen vypsat příspěvky anebo vývojář a chcete tato data vytáhnout přes funkce WordPress anebo rovnou z databáze. V tomto návodě si postupně projdeme všechny varianty.

Jsem uživatel a chci si nechat zobrazit příspěvky s určitým štítkem

Následující postupy vám budou fungovat u všech instalací WordPress, kde výpis není omezen pluginem anebo funkcí, kterou si majitel napsal.

Využití URL

Pokud chcete použít pouze URL, která vám zobrazí příspěvky s určitým štítkem, můžete použít následující formát:

https://vase-domena.tld/tag/nazev-stitku/

Nahraďte vase-domena.tld vaší doménou a nazev-stitku štítku, který chcete zobrazit. Slug je textová verze názvu štítku, která se používá v URL. Například, pokud máte štítek “WordPress”, jeho slug je pravděpodobně “wordpress”. Můžete najít slug štítku v administraci WordPressu v sekci Příspěvky -> Štítky.

Tato URL vám zobrazí stránku archive s příspěvky s daným štítkem. Vzhled a funkce této stránky závisí na vašem aktivním tématu a nastaveních WordPressu. Pokud chcete změnit vzhled nebo funkce této stránky, můžete použít soubor tag.php ve vaší šabloně nebo vytvořit vlastní soubor tag-{slug}.php pro konkrétní štítek.

Využití RSS

WordPress umí vytvořit seznam příspěvků v XML formátu pomocí feedů. Feed je proud příspěvků nebo komentářů, který se aktualizuje, když je publikován nový obsah a je ve formátu XML, který je strojově čitelný. Feed může být čten pomocí aplikací zvaných RSS čtečky, jako je WordPress.com Reader nebo RSSOwl. To je velmi užitečné, protože umožňuje ostatním lidem sledovat váš blog spolu s dalšími weby, které je zajímají, a agregovat je dohromady.

Pro získání příspěvků v XML s určitým štítkem stačí použít následující URL:

https://vase-domena.tld/tag/nazev-stitku/feed/

To se hodí pokud chcete odebírat novinky jen s určitým tématem.

Jsem vývojář a chci se dostat jen k příspěvkům s určitým štítkem

Tady jsou dva postupy. Jeden využívá vestavěnou funkci WordPress a druhý tahá data rovnou z databáze prostřednictvím SQL dotazu.

Využití vestavěné funkce get_posts()

Funkce get_posts() vám umožňuje získat pole příspěvků podle různých parametrů. Jeden z těchto parametrů je tax_query, který vám umožňuje filtrovat příspěvky podle taxonomií a termínů (tedy šítků). Například, pokud chcete získat 5 nejnovějších příspěvků s štítkem WordPress, můžete použít následující kód:

$args = array(
  'post_type' => 'post',
  'posts_per_page' => 5,
  'tax_query' => array(
    array(
      'taxonomy' => 'post_tag',
      'field'    => 'slug',
      'terms'    => 'wordpress',
    ),
  ),
);
$posts = get_posts( $args );

Následující kus skriptu vám vrátí pole příspěvků, které můžete zobrazit podle vaší volby. Například, pokud chcete zobrazit pouze názvy a odkazy na tyto příspěvky, můžete použít následující kód:

if ( $posts ) {
  echo '<ul>';
  foreach ( $posts as $post ) {
    setup_postdata( $post );
    echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
  }
  wp_reset_postdata();
  echo '</ul>';
}

Skript funguje takto:

  • Nejprve zkontroluje, zda pole příspěvků není prázdné. Pokud je prázdné, znamená to, že nebyly nalezeny žádné příspěvky s daným štítkem. Bylo by vhodné tuto variantu ošetřit (else{ ….)
  • Pokud pole příspěvků není prázdné, začne vypisovat seznam příspěvků pomocí HTML elementu <ul>.
  • Potom projde každý příspěvek v poli pomocí cyklu foreach. Pro každý příspěvek nastaví globální proměnnou $post na aktuální příspěvek pomocí funkce setup_postdata(). Tím se umožní použití funkcí WordPress pro zobrazení informací o příspěvku.
  • Potom vypíše název a odkaz na příspěvek pomocí HTML elementu <li> a funkcí WordPress get_permalink() a get_the_title().
  • Nakonec obnoví globální proměnnou $post na původní hodnotu pomocí funkce wp_reset_postdata(). Tím se zabrání konfliktům s dalšími cykly WordPress na stejné stránce.
  • Skončí seznam příspěvků pomocí HTML elementu </ul>.

SQL dotaz pro získání příspěvků podle term_id

Tento SQL dotaz funguje tak, že nejprve vybere všechny object_id z tabulky wp_term_relationships, které odpovídají zadanému term_id a taxonomii. Potom použije tyto object_id jako podmínku pro výběr příspěvků z tabulky wp_posts. Výsledkem je pole příspěvků, které mají termín s id 37 z taxonomie tag.

Pokud chcete změnit termín nebo taxonomii, stačí změnit hodnoty v podmínce WHERE. Pokud chcete použít více termínů nebo taxonomií, můžete použít operátory AND, OR nebo IN.

SELECT * FROM wp_posts WHERE ID IN (
  SELECT object_id FROM wp_term_relationships AS TR
  INNER JOIN wp_term_taxonomy AS TT ON TR.term_taxonomy_id = TT.term_taxonomy_id
  INNER JOIN wp_terms AS T ON TT.term_id = T.term_id
  WHERE TT.taxonomy = 'tag' AND T.term_id = 37
)

Tento SQL dotaz můžete použít například přes phpMyAdmin. Nezapomeňte že dostanete zpět všechny příspěvky, včetně revizí a smazaných.

Napiš komentář