Un sumar (WP) a la CNet


Recentele probleme tehnice m-au determinat să fac unele schimbări, precum – încă nu ştiu dacă temporara sau definitiva – renunţare la pluginul WP-PostViews, care ne dădea un indiciu despre interesul Dvs pentru fiecare articol în parte. Evident, nu era mega-relevant, dat fiind că aproximativ o mie de persoane urmăresc şi prin RSS articolele, unde pluginul „nu bate”. (Apropo: am renunţat pentru că temporar trebuie să folosim un plugin de cache, pentru a mai reduce impactul sitului asupra serverului, iar WP-PostViews nu se împacă cu acesta.)

Dar să trecem la ceva concret. Probabil mulţi ştiţi deja pagina noastră de Sumar. Ea a revenit cumva, doar că evident au dispărut numerele din paranteză ce arătau cât de des a fost citit un anumit articol. Funcţia s-a simplificat. Oricum am rescris-o total, pentru că versiunea anterioară era veche de vreo trei ani şi nu folosea facilităţile mai noi din WordPress, precum shortcode-urile. Drept urmare m-am gândit să vă fac cunoscută funcţia, dacă doriţi ceva similar pe blogurile Dvs. Scrieţi [sumar] într-o pagină WP, copiaţi codul de mai jos în wp-functions.php şi gata (aproape gata… în linia 31 trebuie să actualizaţi calea, conform situaţiei blogului Dvs). După cod vin şi explicaţiile.

[PHP]function func_sumar($atts){
global $wp_query, $wpdb;
$lunile=array("ianuarie", "februarie", "martie", "aprilie", "mai", "iunie", "iulie", "august", "septembrie", "octombrie", "noiembrie", "decembrie");
$content = "";
if(isset($_GET[‘an’])){
$an = $_GET[‘an’]-0;
$luna = $_GET[‘luna’] – 0;
$content .= "<p><strong>Articolele din luna ".$lunile[$luna-1]." ".$an."</strong></p>";
if($an && $luna){
$articole = $wpdb->get_results("SELECT ID,post_title,DATE_FORMAT(post_date,’%d.%m.%Y’) as cand FROM $wpdb->posts WHERE post_status = ‘publish’ AND Month(post_date)=$luna AND Year(post_date_gmt)=$an ORDER BY post_date DESC");
$content .= "<ul>";
foreach($articole as $articol)
$content .= "<li>".$articol->cand.": <a href=’".get_permalink($articol->ID)."’>".$articol->post_title."</a></li>";
$content .= "</ul>";
}
}
else {
$content .= "<p><strong>Ultimele 30 de articole</strong></p>";
$articole = $wpdb->get_results("SELECT ID,post_title,DATE_FORMAT(post_date,’%d.%m.%Y’) as cand FROM $wpdb->posts WHERE post_status = ‘publish’ ORDER BY post_date DESC LIMIT 30");
$content .= "<ul>";
foreach($articole as $articol)
$content .= "<li>".$articol->cand.": <a href=’".get_permalink($articol->ID)."’>".$articol->post_title."</a></li>";
$content .= "</ul>";
$ani = $wpdb->get_results("SELECT DISTINCT YEAR(post_date) as anul,MONTH(post_date) as luna FROM wp_posts ORDER BY YEAR(post_date) DESC,MONTH(post_date) ASC");
$anul=0;
foreach($ani as $an){
if($an->anul != $anul){
$anul = $an->anul;
$content .= "<br>&nbsp;<p><strong>$anul</strong></p>";
}
$content .= "<a href=’http://www.cnet.ro/sumar/?an=".$an->anul."&luna=".$an->luna."’>".$lunile[$an->luna-1]."</a> ".($an->luna!=12?"* ":"");
}
}
return $content;
}

add_shortcode(‘sumar’, ‘func_sumar’);[/PHP]

Şi încep cu linia ultimă, 37, care defineşte shortcode-ul. Simplu. Spunem ca atunci când WordPress întâlneşte într-o pagină scris [sumar] să înlocuiască cu ce returnează funcţia func_sumar. Ce face funcţia? Începe dând acces la variabilele globale ce ne permit să „frunzărim” cu uşurinţă tabele WordPress. În funcţie nu scriem nimic pe ecran (echo), ci colectăm afişarea într-o variabilă căreia i-am spus $content (conţinut).

Avem două cazuri: implicit sumarul afişează ultimele 30 de articole. Dacă însă pagina are ca parametri o lună şi un an va afişa articolele din acea lună a acelui an. Verificăm deci prin testul din linia 5 dacă pagina are parametrii. Dacă da, punem în două variabile ceea ce s-a transmis ca parametru (liniile 6 şi 7). Cheia codului este, în această parte a ramurii IF, linia 10. Aici avem o interogare ce spune pe scurt: dă-mi ID-ul, titlul şi data articolelor care sunt din luna $luna şi din anul $an. Cu un FOREACH parcurgem rezultatele şi le afişăm (liniile 12 şi 13).

Mai simplu este dacă pagina cu sumarul nu e apelată cu parametrii, caz în care pur şi simplu luăm cele mai noi (adică ultimele) 30 de articole (în linia 19 e interogarea). Vine acum o mică provocare: să afişăm legăturile spre lunile şi anii în care avem articole. În linia 24 vedem interogarea MySQL, după care trecem la parcurgerea rezultatelor şi afişarea.

Acest cod îl vedeţi în acţiune aici. Cel puţin zilele acestea (căci nu pot garanta că nu îl voi schimba la un moment dat).


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (Neevaluat încă)
Loading...Loading...

0 comentarii


Lasă un răspuns

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