3

カテゴリページで著者のリストを取得するのに苦労しています。そのカテゴリで少なくとも5つの記事を書いた著者をリストする必要があります。

タグにもこのようなものが必要です。

ワードプレスでこれを行う方法はありますか?

4

4 に答える 4

7

カスタムSQLクエリでのみ可能であるため、現在の用語アーカイブに少なくとも$ nの投稿があるユーザーのユーザーIDを含む配列を返す単純な関数があります。これは、カテゴリ、タグ、およびカスタム分類法で機能する必要があることを意味します。

function get_authors_with($num = 5){
    global $wpdb;
    $term_slug = get_query_var( 'term' );
    $taxonomyName = get_query_var( 'taxonomy' );
    $current_term = get_term_by( 'slug', $term_slug, $taxonomyName );
    $sub_q = $wpdb->prepare("SELECT * FROM $wpdb->posts
            INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
            INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
            WHERE ($wpdb->term_taxonomy.term_id = %s
            AND $wpdb->term_taxonomy.taxonomy = '%s'
            AND $wpdb->posts.post_type = 'post'
            AND $wpdb->posts.post_status = 'publish')",
        $current_term->term_id,
        $taxonomyName
    );
    $sql = $wpdb->prepare("SELECT $wpdb->posts.post_author, FROM (%s)
            GROUP BY $wpdb->posts.post_author
            HAVING count(*) > %s",
            $sub_q,
            $num
    );
    return $wpdb->get_results($sql);
}
于 2012-12-23T21:10:56.307 に答える
2

これを試して。

function list_author_in_this_cat ($with) {
if (is_category()) {
    $current_category = get_query_var('cat');
    $args = array(
        'numberposts' => -1,
        'category' => $current_category,
        'orderby' => 'author',
        'order' => 'ASC'
    );
} else {
    $tag_id = get_query_var('tag_id');
    $args = array(
        'numberposts' => -1,
        'tag__in' =>  $tag_id,
        'orderby' => 'author',
        'order' => 'ASC'
    );
}
$cat_posts = get_posts($args);

$author_id_array = array();
$user_posts = array();
foreach( $cat_posts as $cat_post ):
    $user_posts[$cat_post->post_author][] = $cat_post->ID;
endforeach;

foreach( $user_posts as $key => $user_post ):   
    $user_post = array_unique($user_post);
    $count_user_posts[$key] = count($user_post);

    if ($count_user_posts[$key] >= $with) {
        $author_id_array[] = $key;
    }       
endforeach;

return $author_id_array; }

テーマファイルで、作成者のリストを表示する場所にこのコードを配置します。

if (is_category() || is_tag()) {

    $at_least = 5;  // at least 5 articles in current category or tags

    $author_array = list_author_in_this_cat ($at_least);
    foreach (array_slice($author_array, 0, 4) as $author) : // limit 4 results
        $name = get_userdata($author)->display_name;
        $link = get_userdata($author)->user_login;
        echo "<a href='/author/".$link."'>".$name."</a>\n";
    endforeach;
}
于 2012-12-27T19:59:35.570 に答える
0

テーマのfunction.phpに次のコードを追加します

function get_authors_in_category ( $category_id, $min_posts ) {
    $posts = get_posts( array( 'numberposts' => 1000, 'category' => $category_id ) );
    $author_count = array();
    foreach ($posts as $post) {
    if( array_key_exists( get_the_author_meta( 'display_name', $post->post_author ), $author_count ) ) {
      $author_count[get_the_author_meta( 'display_name', $post->post_author )]++;
     } else { $author_count[get_the_author_meta( 'display_name', $post->post_author )] = 1; }
    }
    $authors = array();
    foreach ( $author_count as $author_name => $count ) {
    if ( $min_posts  <= $count ) {
    $authors[] = $author_name;
    }
    return $authors;
  }

ご覧のとおり、この関数は、カテゴリ内の投稿数が最小の著者の配列を返します。カテゴリIDを渡す必要があります。これは、ワードプレス関数get_cat_IDを使用して取得できます。

この関数は、テーマのどこからでも呼び出して、必要に応じて作成者を表示できます。

注:これは、カスタムSQL関数よりも多くのリソースを消費します。また、この関数にはエラーがある可能性があります。ここに入力してテストしませんでした。

于 2012-12-29T04:59:36.163 に答える
0

クエリPOSTメソッドを使用して簡単なコーディングを行いました。

<?php 
$cur_cat_id = get_cat_id(single_cat_title("",false));
$posts=query_posts("cat=$cur_cat_id&order=ASC");
foreach($posts as $post){
$number_of_posts = number_format_i18n(get_the_author_posts($post->post_author));
if($number_of_posts>5)
{
echo the_author_meta('user_nicename',$post->post_author)."(".number_format_i18n(get_the_author_posts($post->post_author)).")<br>";
}
}
?>

これはあなたの問題を解決するのに役立つかもしれないと思います。

于 2012-12-29T09:57:24.533 に答える