WordPress: Toate, câteva, ultimele articole dintr-o categorie


Am să răspund acum din nou solicitării unui prieten care are un blog WordPress şi ar dori ca într-o pagină să poată afişa toate sau câteva sau ultimele dintre articolele aparţinând unei anume categorii. Nu am reţinut exact care scenariu aşa că – pentru generalitate – m-am gândit să le abordez pe toate. Mai întâi: e util aşa ceva? Foarte. Să zicem că aveţi un sit cu mai multe categorii şi doriţi să oferiţi un fel de cuprins. Un blog cu reţete ar putea dori să aibă o pagină unde să fie enumerate alfabetic toate reţetele de post. Şi alte scenarii…

Preferând calea inserării de coduri proprii în functions.php decât apelarea la un plugin, iată codul ce trebuie folosit:

function ultimeleFunc($atts){
	extract(shortcode_atts(array('dincategoria' => '',),$atts));
	$text='<ul class="random-posts">';
	query_posts("orderby=title&order=ASC&category_name=$dincategoria");
	if (have_posts()) : while (have_posts()) : the_post();
	$text.='<li><a href="'.get_permalink().'">'.get_the_title().'</a> ('.get_the_date("d.m.Y").')</li>';
	endwhile; endif;
	$text.='</ul>';
	wp_reset_query();
	return $text;
}
add_shortcode('ultimele','ultimeleFunc');

Utilizarea presupune să ştiţi slugul categoriei şi atunci într-o pagină dedicată unei categorii trebuie să inseraţi în corpul ei ceva de genul [ultimele dincategoria=biciclete-pentru-fete] sau mai bine ilustrează captura de mai jos.

Dacă vă uitaţi în cod veţi observa că esenţa stă în folosirea funcţiei query_posts pe care vă invit să o studiaţi pentru alte particularizări. Acolo am spus să se facă ordonare după titlu, în ordine ascendentă şi am limitat la o anumită categorie. Se putea merge şi pe ID-ul categoriei, dar pentru cei mai mulţi e mai simplu să ştii că o categorie Fructe are slugul fructe, decât ID-ul 5.

Să mergem mai departe. Dacă nu ne trebuie toate? Poate în pagina cu pricina includem o descriere mai amplă a categoriei şi dorim să ilustrăm cu n articole luate aleator din respectiva categorie… Folosim următorul cod:

function ultimeleFunc($atts){
	extract(shortcode_atts(array('dincategoria' => '','cate' => 10,),$atts));
	$text='<ul class="random-posts">';
	query_posts("showposts=$cate&orderby=rand&category_name=$dincategoria");
	if (have_posts()) : while (have_posts()) : the_post();
	$text.='<li><a href="'.get_permalink().'">'.get_the_title().'</a> ('.get_the_date("d.m.Y").')</li>';
	endwhile; endif;
	$text.='</ul>';
	wp_reset_query();
	return $text;
}
add_shortcode('ultimele','ultimeleFunc');

Acum observaţi că folosim şi un parametru cate pentru a spune câte articole să fie afişate, iar ca ordine nu mai mergem după titlu ci, folosind rand, se ia aleator câte cate. Putem folosi [ultimele dincategoria=’Ciuperci’ cate=5] şi atunci se afişează ultimele 5, sau doar [ultimele dincategoria=’Ciuperci’] şi atunci se afişează ultimele 10 pentru că, fiţi atenţi la codul de sus, implicit cate e iniţializat cu 10 dacă nu primeşte explicit vreo valoare.

În fine, ultimul scenariu: dorim afişarea ultimelor n articole dintr-o categorie. Acum deja am prins ideile principale aşa că modificările în cod sunt intuibile. Ordonăm după dată, descrescător, şi limităm. Atât!

function ultimeleFunc($atts){
	extract(shortcode_atts(array('dincategoria' => '','cate' => 10,),$atts));
	$text='<ul class="random-posts">';
	query_posts("showposts=$cate&orderby=date&order=DESC&category_name=$dincategoria");
	if (have_posts()) : while (have_posts()) : the_post();
	$text.='<li><a href="'.get_permalink().'">'.get_the_title().'</a> ('.get_the_date("d.m.Y").')</li>';
	endwhile; endif;
	$text.='</ul>';
	wp_reset_query();
	return $text;
}
add_shortcode('ultimele','ultimeleFunc');

Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (2 evaluări, media: 5,00 din 5)
Loading...Loading...

1 comentariu

  1. Cristi spune:

    Multumesc Radu, foarte faina ilustrarea folosirii functions.php. Ca de obicei, un articol clar si cuprinzator. Am prins ideea cu afisarea articolelor dintr-o anumita categorie, e mai simplu decat mi-am imaginat.


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *