web-dev-qa-db-ja.com

リンクとグラバターを使ってサイトの作者をリストする

私は簡単だと思ったことをやろうとしています。私は間違っていると思いました。私がやりたいことは、それぞれの作者ページへのリンク、書かれた投稿の数、そしてグラバターを使って、サイドバーにサイトの作者全員をリストアップすることです。 wp_list_authorsは私にグラバターを含めるオプションを全く与えていません。これは私が持っているものです

        $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>';
            }
          }
        }

2つの問題はありますが、どちらでも機能します。

  1. 投稿数でソートする方法が見つかりません
  2. get_users_of_blogは廃止予定の機能です。私は本当にそれを使いたくありません。

Wp_list_authorsを使用して爆発を作成することはできましたが、この方法で表示するためにそこからデータを抽出する方法に関する手掛かりはありませんでした。助けて?

1
Norcross

あなたの問題に答えるために:

投稿数で並べ替え

次のように、配列に必要なすべての情報を集めて、その配列を投稿数でソートすることができます。

    //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;
    }

それから、コードを少し変更します。

        $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は廃止予定です

コーデックスを見れば奇妙なことです。はいこの関数は推奨されていません。バージョン3.1に同梱されているget_users()を使うべきです。

     /**
     * 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();
    }

しかし、あなたがwp_list_authorsを見ればそれはそれ自体でget_users_of_blog()を使います。

お役に立てれば。

2
Bainternet

サイドバーのコードウィジェット:

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()はドキュメントごとに廃止されるかもしれませんが、実際にはwp_list_authors()が内部的に使用しているもの( source )であり、現時点で実行可能な代替手段はありません。

wp_list_authors()をあなたが望むようにカスタマイズする簡単な方法はありません。あなた自身の関数でそれのためにコードを再利用することを提案することができるだけで、グラバターを追加するための修正は最小限になります。

0
Rarst