Cum poți lista toți autorii din blog – partea 2

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:

  1. Autor Doi
  2. Autor Trei
  3. Autor Unu

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:

  1. Autor Doi (5)
  2. Autor Trei (2)
  3. 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.

Cum poți lista toți autorii din blog – partea 1

Cum poți lista toți autorii din blog – partea 1

Pentru a lista autorii din blog se folosește funcția wp_list_authors ( $ args ). Acestă funcție returnează o listă simplă cu toți autorii din blog. Se mai poate folosi și funcția list_authors ( $args ) însă acesta este depreciată și e posibil ca în versiunile ulterioare să nu mai poată fi folosită.

<?php wp_list_authors( $args ); ?>

Argumentele sunt:

<?php 
$args = array( 'orderby' => 'name',
'order'         => 'ASC',
'number'        => null,
'optioncount'   => false,
'exclude_admin' => true,
'show_fullname' => false,
'hide_empty'    => true,
'echo'          => true,
'feed'          => [empty string],
'feed_image'    => [empty string],
'feed_type'     => [empty string],
'style'         => list,
'html'          => true );
?>

Exemple de liste de autori

1. listă ordonată de autori, fără adminstratori, ordonați după nume, crescător, autorii trebuie să aibă minim un articol publicat, se va afișa numărul de articole publicate:

<?php 
$args = array( 'orderby' => 'name',
    'order'         => 'ASC',
    'optioncount'   => true,
    'exclude_admin' => true,
    'hide_empty'    => true,
    'style'         => list
);

echo "<ol>";
    wp_list_authors( $args );
echo "</ol>";
?>

Exemplul de mai sus se poate scrie și în felul următor:


<?php wp_list_authors('orderby=name&order=DES&optioncount=1&exclude_admin=1&hide_empty=1'); ?>

Rezultatul va arăta ca mai jos:

  1. Autor Doi (5)
  2. Autor Trei (2)
  3. Autor Unu (13)

Ordonarea este în ordina alfabetică. Dacă ca argument folosim orderby=post_count&order=DESC lista va arată altfel:

  1. Autor Unu (13)
  2. Autor Doi (5)
  3. Autor Trei (2)

2. listă de autori cu RSS

Folosind tot lista de mai sus adaug text cu link către RSS-ul de autor:

<?php 
$args = array( 'orderby' => 'name',
    'order'         => 'ASC',
    'optioncount'   => true,
    'exclude_admin' => true,
    'hide_empty'    => true,
    'style'         => list,
    'feed' => 'RSS',
    'feed_type' => 'rss'
);

echo "<ul>";
    wp_list_authors( $args );
echo "</ul>";
?>

Am adăugat:

feed – textul ce va fi afișat
feed_type – poate fi rss, rss2, atom și rdf

Rezultatul va fi ca mai jos:

Folosind argumentul feed_image se poate adăuga și imagine. Trebuie să conțină calea către imagine. Va suprascrie argumentul feed.

<?php 
$args = array( 'orderby' => 'name',
    'order'         => 'ASC',
    'optioncount'   => true,
    'exclude_admin' => true,
    'hide_empty'    => true,
    'style'         => list,
    'feed' => 'RSS',
    'feed_image' => 'images/rss.png',
    'feed_type' => 'rss'
);

echo "<ul>";
    wp_list_authors( $args );
echo "</ul>";
?>

Această funcție este destul de flexibilă, însă are dezavantajul că nu permite o formatare avansată. Dacă nu vă mulțumește puteți alege din multele pluginuri existente sau puteți crea o metodă în funcțions.php care să vă returneze lista formatată după dorințe.

În „Cum poți lista toți autorii din blog – partea 2” este prezentat modul prin care se poate crea o listă de autori personalizată.