web-dev-qa-db-fra.com

Liste des auteurs du site avec lien et gravatar

J'essaie de faire quelque chose que je pensais être facile. J'ai supposé mal. Ce que je veux faire, c'est répertorier tous les auteurs d'un site dans la barre latérale, avec un lien vers leur page d'auteur respective, le nombre de messages écrits et leur gravatar. wp_list_authors ne me donne pas la possibilité d'inclure le gravatar du tout. Voici ce que j'ai

        $blogusers = get_users_of_blog();
        if ($blogusers) {
          foreach ($blogusers as $bloguser) {
            $user = get_userdata($bloguser->user_id);
        $post_count = count_user_posts($user->ID);
            if ($post_count) {
        echo '<li>';
        echo '<a href="'.get_bloginfo('url').'/author/' . $user->user_nicename . '">'.get_avatar($user->user_email, '36').'</a>';
        echo '<a href="'.get_bloginfo('url').'/author/' . $user->user_nicename . '">'.$user->display_name.' ('.$post_count.')</a><li>';
            }
          }
        }

Ce qui fonctionne, bien qu'avec deux problèmes:

  1. Je n'arrive pas à les faire trier par nombre de messages
  2. get_users_of_blog est une fonction dépréciée. Je ne veux vraiment pas l'utiliser.

J'ai pu créer un éclat avec wp_list_authors, mais je ne savais pas comment en extraire les données pour les afficher de cette manière. Aidez-moi?

1
Norcross

Pour répondre à vos problèmes:

Tri par nombre de postes

Vous pouvez collecter toutes les informations dont vous avez besoin dans un tableau et trier ce tableau par nombre de messages, comme ceci:

    //function to sort array by filed
    function authors_orderBy($data, $field){
       $code = "if (\$a['$field'] == \$b['$field']) {return 0;} return (\$a['$field'] < \$b['$field']) ? 1 : -1;";
       usort($data, create_function('$a,$b', $code));
       return $data;
    }

puis changez votre code un peu comme ceci:

        $blogusers = get_users_of_blog();
        if ($blogusers) {
            $au = array();
            foreach ($blogusers as $bloguser) {
               $user = get_userdata($bloguser->user_id);
               $post_count = count_user_posts($user->ID);
               $au[] = array('user_id' => $user->ID , 'nicename' => $user->user_nicename, 'display_name' => $user->display_name, 'email' => $user->user_email ,'post_count' => $post_count);
            }

            //Sort array
            $au = authors_orderBy($au, 'post_count');

           //then loop through the authors
           foreach ($au as $aut){
             if ($aut['post_count'] > 0) {
                echo '<li>';
                echo '<a href="'.get_bloginfo('url').'/author/' . $aut['nicename'] . '">'.get_avatar($aut['email'], '36').'</a>';
                echo '<a href="'.get_bloginfo('url').'/author/' . $aut['nicename'] . '">'.$aut['display_name'] .' ('.$aut['post_count'].')</a><li>';
             }
           }
        }

get_users_of_blog est une dépréciée

C'est bizarre parce que, en regardant le codex Oui, cette fonction est dépréciée et vous devez utiliser get_users() qui devrait être fourni avec la version 3.1.

     /**
     * Retrieve list of users matching criteria.
     *
     * @since 3.1.0
     * @uses $wpdb
     * @uses WP_User_Query See for default arguments and information.
     *
     * @param array $args
     * @return array List of users.
     */
    function get_users( $args ) {

            $args = wp_parse_args( $args );
            $args['count_total'] = false;

            $user_search = new WP_User_Query($args);

            return (array) $user_search->get_results();
    }

mais si vous regardez wp_list_authors, il utilise get_users_of_blog () soit lui-même.

J'espère que cela t'aides.

2
Bainternet

widget de code pour la barre latérale:

add_action( 'widgets_init', 'latest_members_widgets' );

function latest_members_widgets() {
register_widget( 'Latest_Members' );
}
class Latest_Members extends WP_Widget {
function Latest_Members() {
    $widget_ops = array( 'classname' => 'latest_members', 'description' =>   'Visualizza gli avatar degli utenti iscritti.' );
    $this->WP_Widget( 'latest-members-widget', 'Iscritti Recenti', $widget_ops);
}


 function widget( $args, $instance ) {
    extract( $args );

    $title = apply_filters('widget_title', $instance['title'] );
    $avatars = $instance['avatars']; ?>

    <?php echo $before_widget; ?>

    <?php if ( $title ) echo $before_title . $title . $after_title; ?>

    <div class="widget_latest_members">
    <ul>
        <?php global $wpdb;
        $szSort = "user_registered";
        $aUsersID = $wpdb->get_col( $wpdb->prepare(
        "SELECT $wpdb->users.ID FROM $wpdb->users ORDER BY ID DESC LIMIT $avatars", $szSort ));
        foreach ( $aUsersID as $iUserID ) :
        $user = get_userdata( $iUserID );
        echo '<a href="'.get_bloginfo(url).'/?author='.$iUserID.'" rel="profilo" title="Vai al Profilo">'.get_avatar($iUserID, 35,$default=$author->ID).'</a>';
        endforeach; ?>
        <br />
  <div class="totale"><?php $users = $wpdb->get_var("SELECT COUNT(ID) FROM $wpdb->users"); echo $users." utenti registrati";?></div>
</ul>
    </div>

    <?php echo $after_widget; }

function update( $new_instance, $old_instance ) {
    $instance = $old_instance;

    $instance['title'] = strip_tags( $new_instance['title'] );
    $instance['avatars'] = strip_tags( $new_instance['avatars'] );

    return $instance;
}

function form( $instance ) {

    /* Set up some default widget settings. */
    $defaults = array( 'title' => 'Latest Members', 'avatars' => 20);
    $instance = wp_parse_args( (array) $instance, $defaults ); ?>

    <p>
        <label for="<?php echo $this->get_field_id( 'title' ); ?>">Titolo:</label>
        <br/><input type="text" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" />
    </p>
    <p>
        <label for="<?php echo $this->get_field_id( 'avatars' ); ?>">Numero Avatar da visualizzare:</label>
        <br/><input type="text" id="<?php echo $this->get_field_id( 'avatars' ); ?>" name="<?php echo $this->get_field_name( 'avatars' ); ?>" value="<?php echo $instance['avatars']; ?>" />
    </p>

<?php
}
    }

    ?>
0
Fask

get_users_of_blog() peut être déconseillé selon la documentation, mais il s’agit en fait de ce que wp_list_authors() utilise en interne ( source ) et il ne semble pas y avoir d’alternative viable pour le moment.

Je ne vois pas de moyen facile de personnaliser wp_list_authors() comme vous le souhaitez. Vous ne pouvez que suggérer de réutiliser le code correspondant dans votre propre fonction, les modifications pour ajouter gravatar seront minimes.

0
Rarst