1

現在、私はすべての著者のリストを取得するために次のことを行っています。

$authors = wp_list_authors('html=0&style=none&echo=0&exclude_admin=1&optioncount=0&show_fullname=1&hide_empty=1&orderby=name&order=ASC'); 

$authors_array = explode(',', $authors);

for ($j = 0; $j < count($authors_array); $j++)
{
    echo '<li id="">'.$authors_array[$j].'</li>';
}

ユーザーのIDも取得するにはどうすればよいですか?

私はいたるところを見てきましたが、すべての作成者と別のメタデータを取得する方法を考えることはできません。

4

2 に答える 2

4

私が見つけた別の方法は、次のことを行うことでした(以前はこのようなものが見つからなかったことを誓います):

$authors = get_users('role=author&orderby=display_name&order=ASC');

foreach ($authors as $author) {
    if (count_user_posts($author->ID) > 0) {
       echo '<li id="' . $author->ID . '">' . $author->display_name . '</li>';
    }
}
于 2012-08-13T14:17:26.747 に答える
1

関数をfunctions.phpでオーバーライドするか、元の関数に基づいて新しい関数を作成することができます。コードを見ると、foreachループに$author_idを含めるだけで十分簡単です。

オリジナルのコードはこちら

これを試して、新しいパラメーター(includeauthorid)を関数呼び出しに追加してください...

$authors = wp_list_authors('html=0&style=none&echo=0&exclude_admin=1&optioncount=0&show_fullname=1&hide_empty=1&orderby=name&order=ASC&includeauthorid=1');  

新しい関数-ps元の関数を変更することはお勧めしません。これをfunctions.phpに入れるだけです。

function wp_list_authors($args = '') {
global $wpdb;

$defaults = array(
    'orderby' => 'name', 'order' => 'ASC', 'number' => '',
    'optioncount' => false, 'exclude_admin' => true,
    'show_fullname' => false, 'hide_empty' => true,
    'feed' => '', 'feed_image' => '', 'feed_type' => '', 'echo' => true,
    'style' => 'list', 'html' => true,
    'includeauthorid' => false 
);

$args = wp_parse_args( $args, $defaults );
extract( $args, EXTR_SKIP );

$return = '';

$query_args = wp_array_slice_assoc( $args, array( 'orderby', 'order', 'number' ) );
$query_args['fields'] = 'ids';
$authors = get_users( $query_args );

$author_count = array();
foreach ( (array) $wpdb->get_results("SELECT DISTINCT post_author, COUNT(ID) AS count FROM $wpdb->posts WHERE post_type = 'post' AND " . get_private_posts_cap_sql( 'post' ) . " GROUP BY post_author") as $row )
    $author_count[$row->post_author] = $row->count;

foreach ( $authors as $author_id ) {
    $author = get_userdata( $author_id );

    if ( $exclude_admin && 'admin' == $author->display_name )
        continue;

    $posts = isset( $author_count[$author->ID] ) ? $author_count[$author->ID] : 0;

    if ( !$posts && $hide_empty )
        continue;

    $link = '';

    if ( $show_fullname && $author->first_name && $author->last_name )
        $name = "$author->first_name $author->last_name";
    else
        $name = $author->display_name;

    if( $includeauthorid)
        $name .= ' ('. $author_id .')';

    if ( !$html ) {
        $return .= $name . ', ';

        continue; // No need to go further to process HTML.
    }

    if ( 'list' == $style ) {
        $return .= '<li>';
    }

    $link = '<a href="' . get_author_posts_url( $author->ID, $author->user_nicename ) . '" title="' . esc_attr( sprintf(__("Posts by %s"), $author->display_name) ) . '">' . $name . '</a>';

    if ( !empty( $feed_image ) || !empty( $feed ) ) {
        $link .= ' ';
        if ( empty( $feed_image ) ) {
            $link .= '(';
        }

        $link .= '<a href="' . get_author_feed_link( $author->ID ) . '"';

        $alt = $title = '';
        if ( !empty( $feed ) ) {
            $title = ' title="' . esc_attr( $feed ) . '"';
            $alt = ' alt="' . esc_attr( $feed ) . '"';
            $name = $feed;
            $link .= $title;
        }

        $link .= '>';

        if ( !empty( $feed_image ) )
            $link .= '<img src="' . esc_url( $feed_image ) . '" style="border: none;"' . $alt . $title . ' />';
        else
            $link .= $name;

        $link .= '</a>';

        if ( empty( $feed_image ) )
            $link .= ')';
    }

    if ( $optioncount )
        $link .= ' ('. $posts . ')';

    $return .= $link;
    $return .= ( 'list' == $style ) ? '</li>' : ', ';
}

$return = rtrim($return, ', ');

if ( !$echo )
    return $return;

echo $return;

}

于 2012-08-13T12:51:54.663 に答える