Přidání Custom Post Types do nejnovějších příspěvků

wordpress-code

WordPress v základní instalaci nabízí několik základních widgetů, kterými lze oživit webové stránky. Jedním z nich je i widget, který zobrazuje nejnovější příspěvky. Zde na webu je použit a tak pokud jej neznáte, můžete si jej prohlédnout.

Widget se jednoduše vezme, přetáhne se na místo, na kterém jej chcete mít na webu, a od té doby tam zobrazuje vámi určený počet příspěvků. Základní problém tohoto widgetu je ten, že zobrazuje jen a pouze nejnovější příspěvky. Pokud ovšem využíváte Custom Post Types, jako je to zde na webu, tak může nastat komplikace. Našimi vlastními typy příspěvků jsou seriály, ty jsou řazeny zvlášť. U tohoto velmi často narazíte na problém. Nové vlastní typy příspěvků se v tomto widgetu nebudou zobrazovat, což je jistě veliká škoda a někdo by možná uvítal, aby tomu bylo jinak. Proto se pojďme podívat na to, co je zapotřebí pro to, aby se zobrazovalo vše tak, jak potřebujete.

Najdeme si třídu, která se jmenuje WP_Widget_Recent_posts, jde o rozšíření funkce WP_Widget. Tuto třídu najdete v souboru default-widgets.php, umístěného ve složce wp-includes. V této funkci je následující kus kódu:

$r = new WP_Query( apply_filters( 'widget_posts_args', array(

'posts_per_page' => $number,

'no_found_rows' => true,

'post_status' => 'publish',

'ignore_sticky_posts' => true

) ) );

Ten sám o sobě vypadá ne příliš přátelsky, protože tam není nic, co by indikovalo, co konkrétně jde vybrat a jak přidat to, co potřebujete. Naštěstí stačí přidat naprosto jednoduchý kód, který vypadá asi takto:

'post_type' => array('post','PHGame_serialy'),

Tedy výsledek se bude tvářit takto, když to do této části vložíte:

$r = new WP_Query( apply_filters( 'widget_posts_args', array(

'posts_per_page' => $number,

'no_found_rows' => true,

'post_status' => 'publish',

'post_type' => array('post','PHGame_serialy'),

'ignore_sticky_posts' => true

) ) );

Tímto docílíte toho, že se vám krom posledních příspěvků budou zobrazovat i vaše vlastní typy příspěvků, v našem případě to jsou PHGame_seriály. Tím ale editace nekončí. Pokud chcete nechat zobrazit jen příspěvky, nebo jen stránky či jen vaše vlastní typy příspěvků, stačí takto editovat pouze na váš vlastní typ a rázem máte z nejnovějších příspěvků třeba nejnovější stránky.

Nevýhodou tohoto řešení je fakt, že pokud budete aktualizovat WordPress, o tuto editaci s největší pravděpodobností přijdete. Nejlepším a i nejsprávnějším řešením je zkopírování celé třídy WP_Widget_Recent_posts a vytvoření její kopie v nějakém pluginu, který používáte. Zde by bylo dobré lehce přejmenovat některé věci, jako je třeba název třídy. Ono by si to totiž jinak PHP mohlo vyložit jako provokaci, že máte dvě identické třídy a na důkaz jeho lásky k vám, vyhodit fatal error. Další věc, kterou by bylo dobré změnit, je název. Aby se dala editovat tato třída, kterou jste vytvořili ve widgetech. A hlavně abyste ji poznali od té původní z WordPressu. Zbytek zůstává stejný. Výhoda této změny je ta, že funkci máte ve vlastním widgetu. Nemanipulujete se soubory WordPressu, a tak je možné WordPress pohodlně aktualizovat beze ztráty této změny.

Jediný rozdíl bude, že budete muset ještě navíc přidat add_action s parametrem widgets_init a vytvořit funkci, která bude obsahovat funkci register_widget, protože bez toho se tato funkce nespustí.