Cum poți lista toți autorii din blog – partea 2
În prima parte a acestui tutorial am arătat cum se pot lista autorii din blog folosind funcții WordPress. În partea a doua voi prezenta o metodă mai complexă de a lista autorii. Avantajul acestei metode este flexibilitatea.
De cele mai multe ori nu avem nevoie de liste cu autori, fie ele ordonate sau neordonate sau șiruri simple cu autorii despărțiți prin virgulă. Temele pot fi suficient de complexe încât să fie nevoie a se afișa avatarul autorului, numele, link către blog, link către blogul extern al autorului într-o aranjare formatată complicat.
În acest tutorial vă voi arăta o metodă simplă ce poate fi extinsă și folosită în mod creativ.
Pentru început în functions.php scriem o funcție ce ne va returna o listă ordonată de autori, cu tot cu administratori, cu tot cu autorii cu zero postări, fără contorizarea postărilor:
<?php function lista_autorilor() { global $wpdb; $authors = $wpdb->get_results("SELECT ID, user_nicename from $wpdb->users ORDER BY display_name"); foreach($authors as $author) { $author_id = $author->ID; $author_url = get_author_posts_url( $author_id ); $auhor_display_name = get_the_author_meta('display_name', $author_id); $list_authors .= " <li>"; $list_authors .= "<a href=\"".$author_url."\">".$auhor_display_name."</a>"; $list_authors .= "</li> "; } return $list_authors; } echo " <ol>"; echo lista_autorilor(); echo "</ol> "; ?>
Rezultatul este simplu de intuit:
Având aceste date și mai ales având id-ul autorilor putem afla și lista o mulțime de detalii.
În primul rând să eliminăm din listă adminstratorii. Trebuie știut că adminstratorii au nivelul 10 (vezi: User Level). Vom afla nivelul fiecărui autor și vom elimina pe cei de level 10.
Metoda folosită va fi : get_the_author_meta( ‘user_level’, $author_id ). Astfel funcția lista_autorilor() devine:
<?php function lista_autorilor() { global $wpdb; $authors = $wpdb->get_results("SELECT ID, user_nicename from $wpdb->users WHERE display_name <> 'admin' ORDER BY display_name"); foreach($authors as $author) { $author_id = $author->ID; if(get_the_author_meta( 'user_level', $author_id ) != '10') { $author_url = get_author_posts_url( $author_id ); $auhor_display_name = get_the_author_meta('display_name', $author_id); $list_authors .= " <li>"; $list_authors .= "<a href=\"".$author_url."\">".$auhor_display_name."</a> (".$posts_count.")"; $list_authors .= "</li> "; } } return $list_authors; } ?>
Am eliminat de la afișare toți autorii cu rol de adminstrator.
Si ultima parte din acest tutorial adaugă funcției o condiție nouă și anume să se afișize doar autorii cu minim un articol publicat. Pentru asta trebuie numarate posturile publicate de fiecare autor. Vom face asta în cadrul funcției, astfe:
<?php function lista_autorilor() { global $wpdb; $authors = $wpdb->get_results("SELECT ID, user_nicename from $wpdb->users WHERE display_name <> 'admin' ORDER BY display_name"); foreach($authors as $author) { $author_id = $author->ID; if(get_the_author_meta( 'user_level', $author_id ) != '10') { $posts_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = $author_id AND post_type = 'post' AND NOT post_type = 'page' AND post_status = 'publish'" ); if($posts_count > 0) { $author_url = get_author_posts_url( $author_id ); $auhor_display_name = get_the_author_meta('display_name', $author_id); $list_authors .= " <li>"; $list_authors .= "<a href=\"".$author_url."\">".$auhor_display_name."</a> (".$posts_count.")"; $list_authors .= "</li> "; } } } return $list_authors; } echo " <ol>"; echo lista_autorilor(); echo "</ol> "; ?>
Rezultatul va arăta ca mai jos:
- Autor Doi (5)
- Autor Trei (2)
- Autor Unu (13)
Pentru a afla url-ul rss-ului fiecărui autor se intruduce în funcție următorul cod:
<?php $author_feed_url = $author_url."feed/"; $list_authors .= " (<a href=\"".$author_feed_url."\">RSS</a>)"; ?>
Pentru a afla celelalte informații despre autor folosiți funcția get_the_author_meta funcție care returnează toate meta datele autorilor.
O altă metodă de a lista autorii este folosirea clasei WP_User.
Comentarii recente