Ako zmeniť poradie článkov vo WordPress-e

Keďže WordPress je primárne určený na blogovanie, články sú štandardne radené chronologicky podľa dátumu a času publikovania. Najnovšie články sú na vrchu stránky, najstaršie kdesi dole. Akonáhle však WordPress nepoužívate ako čistý blog, ale povedzme ako informačnú stránku o firme, prednastavené poradie nemusí vyhovovať. WordPress však priamo funkciu na zmenu poradia článkov nemá.

Úprava dátumu

Najjednoduchšia možnosť, ktorá napadne asi každého, je zmeniť dátum publikovania tak, aby boli články zoradené v želanom poradí. Riešenie funguje, má však niekoľko nevýhod:

  • Skutočný dátum publikovania článku má pre mňa význam a preto ho nechcem len tak chaoticky meniť.
  • V mojom prípade sa jednalo o importované články z pôvodného nonWP blogu. Všetky majú dátum publikovania rovnaký. Ručne meniť 500+ článkov, na to nemám nervy.
  • Ak máte sériu článkov, ktorým nastavíte rovnaký dátum aj čas (hodiny, minúty) publikovania, je ťažké predikovať finálne poradie zobrazenia. Pretože do usporiadania vstupujú aj sekundy, ktoré sú síce v SQL databáze zaznamenané, no štandardne ich nie je možné v admin rozhraní meniť (ani vidieť).

Použitie pluginu

Post Types Order je obľúbený plugin, v čase písania tohto článku nasadený na viac ako 400.000 blogoch. Free verzia umožňuje meniť poradie článkov spôsobom drag & drop, čo je veľmi pohodlné. Teda ak potrebujete zmeniť poradie pre maximálne niekoľko desiatok článkov. Ak potrebujete zmeniť poradie 100+ článkov, poťahovať ich po jednom myšou hore-dole je na mašľu.

Tento problém vie riešiť platená verzia pluginu Advanced Post Types Order, ktorá umožňuje automatické usporiadanie poradia, napríklad podľa názvu. Navyše je možné preusporiadať iba články zaradené do nejakej kategórie, nie celý blog. Avšak plugin stojí 35$. Načo platiť za veci, ktoré si viem napísať za pár minút?

Urob si sám

Mojou úlohou bolo usporiadať hrču článkov, patriacich do jednej konkrétnej kategórie, tak aby sa vypisovali podľa poradia, v akom boli na stránku pridané. A to bez ohľadu na dátum a čas publikovania, keďže ten majú predmetné články rovnaký.

Na vyriešenie tohto problému použijeme niečo, čo sa volá „action hook“. Action hook pracuje úplne rovnako ako filter hook, ktorého použitie som vysvetľoval v mojom predchádzajúcom návode Ako zakázať zobrazovanie dátumu vo WordPresse. Jediný rozdiel je, že kým filer hook modifikuje dátový výstup nejakej funkcie, action hook modifikuje samotný spôsob spracovania dát. Cez action hook je teda možné modifikovať volanie (query) do SQL databázy, ktoré načítava zoznam článkov a určiť tak iné poradie týchto článkov.

  1. Vytvorte si odvodenú tému (child theme), aby sme neprasili do originálnej.
  2. Do súboru s názvom function.php v rámci svojej odvodenej témy vložte tento kus kódu:
function modify_query_order( $query ) {
    if( $query->is_main_query() && $query->is_category( array('sex','drogy','peniaze') ) ) {
        $query->set( 'orderby', 'ID' );
        $query->set( 'order', 'DESC' );
    }
}
add_action( 'pre_get_posts', 'modify_query_order', 10 );

Nami vytvorená funkcia modify_query_order dodatočne upraví poradie načítania článkov z databázy, a to tak, že modifikuje premennú $query, čo je zjavne objekt, ktorý slúži na vyskladanie finálnej požiadavky do SQL databázy. Nastavením parametra „orderby“ určíme, že chceme usporiadavať podľa vnútorného ID daného článku. Parameter „order“ v našom príklade definuje, že usporiadanie má byť od najväčšieho čísla smerom k najmenšiemu.

Zmena sa aplikuje iba ak nastanú tieto dva prípady súčasne:

  • Nami modifikovaná $query už obsahuje obmedzenie na konkrétnu kategóriu. Vstupom funkcie is_category môže byť jedna alebo viac kategórií vo forme id, slug alebo názov.
  • Jedná sa o hlavné (main) volanie query na danej stránke – funkcia is_main_query. Pri generovaní stránky sa totiž rozlišuje, či ide o požiadavku na hlavný výpis zoznamu článkov, alebo o vedľajšie (secondary) načítanie. Napríklad ak téma zobrazuje pod článkom upútavku na 3 iné články z danej kategórie, jedná sa o vedľajšie načítanie. Hlavné načítanie je pre každú stránku len jedno, vedľajších môže byť viac.

Výsledkom teda je, že články budú vo výpise danej kategórie usporiadané v poradí, v akom sme ich pridávali na stránku, t.j. najnovšie hore. A to bez ohľadu na nastavený dátum/čas publikovania. Zmena sa rovnako prejaví aj v admin rozhraní.


Použitá fotografia: books-bookstore-book-reading-shop / Autor: LubosHouska / Licencia: CC0

Gendzo

Cez deň pracujem ako IT manažéris. Po nociach robím vlastné web stránky a píšem články. Rád varím, cestujem a lúštim hlavolamy. Vo voľnom čase cvičím power jogu, pestujem zeleninu a hľadám geokešky. A som šťastný majiteľ jednej skvelej manželky a dvoch detí k tomu. www.gendzo.sk/autor/gendzo-macher

1 odpoveď

  1. 09.12.2018

    […] V tomto tutoriáli sa naučíme pracovať vo WordPress-e s vlastnými metadata údajmi a to prostredníctvom metaboxov, ktoré doplníme do admin rozhrania. Prehĺbime si tiež znalosti ohľadom vytvárania pluginov a modifikácie štandardného správania cez filter hook a action hook. […]

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *

Táto webová stránka používa Akismet na redukciu spamu. Získajte viac informácií o tom, ako sú vaše údaje z komentárov spracovávané.