Robíme WordPress #5 - Post Types a Shortcodes

napísal , 25 Jul 2012 [ PHP Tutoriály Videá ]

Dnes budeme vytvárať vlastné typy príspevkov - custom post types.

WordPress od základu ponúka Posts (klasické články) a Pages (statickejší obsah, napríklad "O nás" stránky a tak podobne) ale čo ak naša stránka bude potrebovať niečo špecifickejšie? Čo ak chceme výpis krátkych noviniek alebo zoznam ponúkaných produktov?

Môžeme to nakydať do klasických článkov, alebo (a toto je lepší nápad) môžeme v rámci našej témy vytvoriť vlastné typy príspevkov a zamedziť tak bordelu.

Kto ma chce podporiť, môže po mne hodiť groš na yablko.sk. Dík!

Ďalej tu v článku nájdete zopár highlightov z videa a na jeho konci si, ako býva zvykom, môžete stiahnuť aktuálnu verziu témy.

 

Do functions.php pridáme:

/**
 * custom post type - FEATURED
 */
add_action('init', 'featured_custom_init');
function featured_custom_init() {

	register_post_type('featured', array(
		'label' => 'Featured',
		'public' => true,
		'exclude_from_search' => true,
		'has_archive' => true,
		'supports' => array( 'title', 'editor' ),
	));

}

Viac nastavení nájdeme v dokumentácii.

 

Pre výpis nášho nového featured post type môžeme použiť funkciu get_posts:

$featured_items = get_posts(array(
	'numberposts' => -1,
	'orderby'	  => 'post_date',
	'order'		  => 'DESC',
	'post_type'	  => 'featured',
));

foreach ( $featured_items as $post) : setup_postdata( $post ); ?>

	<article class="featured_item">
		<h3><?php the_title() ?></h3>
		<?php the_content() ?>
	</article>

<?php endforeach; ?>

Pomocou setup_postdata( $post ); získame možnosť používať the_title() a podobne. Tieto, okrem iného, prefiltrujú obsah vytiahnutý z databázy a vypľujú ho na stránku. Filtrovať však môžeme aj manuálne, pomocou apply_filters:

 

$title   = apply_filters( 'the_title', $post->post_title );
$content = apply_filters( 'the_content', $post->post_content );

V dokumentácii je znova kopa použiteľných filtrov.

 

WordPress tiež pozná tzv. shortcodes. Je to nejaký textový reťazec v hranatých zátvorkách, ktorý môžeme vložiť do textu článku a WordPress ho nahradí tým, čo potrebujeme. Napríklad my shortcode [gimme_featured] nahradíme obsahom článkov s nášho featured post type.

Najprv treba shortcode zaregistrovať, napríklad vo functions.php a napísať funkciu, ktorá na stránku namiesto shortkódu vypľuje nami žiadaný obsah:

/**
 * shortcode pre FEATURED
 */
add_shortcode('featured', 'featured_shortcode');
function featured_shortcode()
{
	$loop = new WP_Query( array( 'post_type' => 'featured', 'posts_per_page' => -1 ) );

	$text = '';
	while ( $loop->have_posts() )
	{
		$loop->the_post();

		$text .= '<article class="featured-item">';
		$text .= '	<h3>'. get_the_title() .'</h3>';
		$text .= 	get_the_content('');
		$text .= '</article>';
	}

	wp_reset_query();
	
	return $text;
}

V tomto prípade namiesto get_posts používame WP_Query.

 

Ak chceme shortcodes používať vo widgetoch, treba pridať nasledovný riadok:

/**
 * spojazdni shortcodes v text widgetoch
 */
add_filter( 'widget_text', 'do_shortcode' );

 

Viac ku všetkému samozrejme vo videu;)

Hudba je od Le Troubadour de Saint Alizee a stiahnite si ju a tešte sa na nový album.
To je rozkaz (nie je).


Stiahnite si tému: amazeballs_v029.zip

napísal , 25 Jul 2012

16 komentárov

komentuj ku každému komentáru sa v databáze ukladá iba meno, text a dátum, iba za účelom zobrazenia pod článkom
neukladá sa email, IP adresa ani informácie o prehliadači a údaje sa nepoužívajú na reklamu, newsletter, na žiadnu ekonomickú aktivitu, nikam sa neposielajú, sú v databáze len aby sa mohli zobraziť pod článkom
  1. fero [ Streda 25.7.2012, 17:11 ]

    vdaka ze to robis. a robis to velmi dobre !

  2. Len do toho [ Streda 25.7.2012, 18:06 ]

    Konecne :) Aj keď som v programovaní (podla môjho názoru) ako-tak dobrý aj tak mi tvoje videá vždy dajú niečo nové (tým nemyslím iba wordpress). Keď budem mať na účte viac € tak ti z nich zopár donatnem, aby si mal väčšiu motiváciu na toto :)

  3. Ado [ Streda 25.7.2012, 19:50 ]

    Robiš to ok ale poprosil by som trochu castejsie kym bude dalsi tut tak ja zabudnem co bolo v predoslom akoze :D

  4. yablko [ Štvrtok 26.7.2012, 00:32 ]

    ešteže toto je internet, kde môžeš veci pozerať dokola:)

  5. Andrej [ Štvrtok 26.7.2012, 00:40 ]

    huraa =)) tiez som preklikaval kazdy den a cakal na dalsiu cast :D

  6. Fexo [ Štvrtok 26.7.2012, 02:52 ]

    s tým ST2 pôsobíš dosť profesionálne, neviem či si si jeho prostredie príliš nevytunil :D

    na začiatočníkov to môže pôsobiť celkom chaotický, jak to všetko rýchlo zvládaš s prehľadom .. viem že si robil videa aj ako nastaviť ST2 a asi sa snažíš vyhýbať 3/4 hodinovým videám ako občas v minulosti, ktoré som si aj tak rád pozrel

    mne osobné sa páčilo, jak si sa babral s písaním a ešte občas do toho vyskočil nejaký error :D

    každopádne GJ ako vždy ;)

  7. Ado [ Štvrtok 26.7.2012, 10:08 ]

    hej ale mohol by si to tocit castiejsie

  8. yablko [ Štvrtok 26.7.2012, 13:33 ]

    fexo: hej, chcem to držať čo možno najkratšie.. pozeral som staršie videá a iritovalo ma, koľko mi trvá, kým niečo napíšem a ako často sa opakujem a dokola vysvetľujem to isté.. tak sa to snažím teraz radikálnejšie prestrihávať a možno máš pravdu, možno to trocha preháňam.. :)

    ado: treba myslieť na to, že spraviť pár minútové video, ak ho chceš spraviť dobre, trvá hodiny.. človek si to musí nachystať, pripraviť, natočiť, upraviť, nastrihať, nájsť hudbu, narvať obrázky a kým sa to konvertuje a uploaduje napísať články a popisy k videu a potom to rozhádzať na sociálne siete.. a občas treba aj jesť :)

    navyše teraz mi blbol nahrávací softvér, niektoré pasáže som musel točiť viac krát, celé to konvertovať z jedného formátu do druhého a ten editovať cez iný softvér, na ktorý môj počítať ledva stačil.. nahral som 2 videá a "zabil" som tým takmer 3 dni

    snažím sa (trochu sa posťažovať a) povedať, že by som rád robil častejšie, ale ono to nie je len tak:)

  9. Maros [ Štvrtok 26.7.2012, 14:10 ]

    Ahoj, robis tie tutoriali velmi dobre. +1 Pozram aj tieto (myslim wordpress) a su pekne, aj ked prejst k php z javy sa asi nedokopem. (zavidim "sikovne" cms-ka)

  10. Pavol Holes [ Piatok 27.7.2012, 00:16 ]

    Super tutorialy. Diki moc, dlho som sa nedokazal prinutit prerobit staru staticku page na wordpress, teraz sa idem do toho s radostou pustit. Cakam na dalsie... :) A feedmyinbox ma dalsi feed :))

  11. JaJ [ Piatok 27.7.2012, 16:30 ]

    Yablko, a kebyže k tomu featured by som chcel povoliť prístup len pre administrátora stránky tj aby autor tam nevedel nič pridávať to sa ako dá spraviť? :)

  12. yablko [ Piatok 27.7.2012, 19:58 ]

    JaJ: najjednoduchšie bude na začiatok funkcie featured_custom_init() pridať:

    if ( !current_user_can('manage_options') ) return;

    ak user nemôže meniť options (tradične len admin môže), tak ho nepostíme ďalej

    lepšie by bolo možno niečo takéto http://webtide.wordpress.com/2010/07/20/how-to-use-the-members-plugin-to-restrict-access-to-wordpress-3-0-custom-post-type ale to by bolo na dlhšie.. možno samostatné video, ktoré by sa venovalo rolám a ich kvalifikáciám

  13. trkiwp [ Štvrtok 2.8.2012, 13:00 ]

    ah man, awesome again :) dufam ze ti tieto tutorialy vydrzia co najdlhsie :)

  14. PluuS [ Utorok 2.10.2012, 23:25 ]

    Hoj Yablo,
    chtěl bych se zeptat jak udělat, kdybych chtěl aby se mi tyhle moje custom post type zobrazovali na samostatné stránce? Protože když vložím stejný kód jako ty používáš v tutoriálu do obsahu stránky, vypíše mi ten kód, ale nezpracuje ho...
    A ještě jeden dotaz - chci udělat menu podle kategorií. Je jasné že lze zjistit číslo Kategorie a přesně ho napsat, ale určitě existuje i elegantnější řešení. Poradíš?

    Dík moc za pomoc i tutoriály

  15. Anabela [ Sobota 19.1.2013, 20:04 ]

    Vďaka, super seriál!

  16. Khadija [ Utorok 8.12.2015, 19:35 ]

    Every now and then men and women are layered prfeer this. There’s a little something different underneath than what’s on top. But occasionally, there’s 1 / 3, actually deeper level, and that one is the same as the very best surface one.

ku každému komentáru sa v databáze ukladá iba meno, text a dátum, iba za účelom zobrazenia pod článkom
neukladá sa email, IP adresa ani informácie o prehliadači a údaje sa nepoužívajú na reklamu, newsletter, na žiadnu ekonomickú aktivitu, nikam sa neposielajú, sú v databáze len aby sa mohli zobraziť pod článkom