Список категорий по автору ~ С COUNTER ~ (WordPress)

Это код, который у меня есть. Он дает список категорий, которые опубликовал данный автор. Однако мне очень хотелось бы иметь номер рядом с названием категории, указав, сколько сообщений опубликовано автором в разных категориях. Кто-нибудь знает трюк? Благодаря!

<?php $author = get_query_var('author'); $categories = $wpdb->get_results(" SELECT DISTINCT(terms.term_id) as ID, terms.name, terms.slug, tax.description FROM $wpdb->posts as posts LEFT JOIN $wpdb->term_relationships as relationships ON posts.ID = relationships.object_ID LEFT JOIN $wpdb->term_taxonomy as tax ON relationships.term_taxonomy_id = tax.term_taxonomy_id LEFT JOIN $wpdb->terms as terms ON tax.term_id = terms.term_id WHERE 1=1 AND ( posts.post_status = 'publish' AND posts.post_author = '$author' AND tax.taxonomy = 'category' ) ORDER BY terms.name ASC "); ?> <ul> <?php foreach($categories as $category) : ?> <li> <a href="<?php echo get_category_link( $category->ID ); ?>" title="<?php echo $category->name ?>"> <?php echo $category->name.' '.$category->description; ?> </a> </li> <?php endforeach; ?> </ul> 

РЕДАКТИРОВАТЬ:

Этот код учитывает сообщения в категории и отлично работает. Я хочу совместить это с кодом выше, но я не знаю, как это сделать …

 <?php $counter = "SELECT COUNT(*) FROM $wpdb->posts LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id) LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) WHERE $wpdb->term_taxonomy.term_id = 412 AND $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->posts.post_status = 'publish' AND post_author = '1' "; $user_count = $wpdb->get_var($counter); echo $user_count; ?> 

Я понял это … должен был работать, чтобы разделить функции SELECT: один, чтобы получить список категорий, а затем еще одну функцию внутри этого цикла, чтобы подсчитать, сколько записей в этой категории. Я бы предпочел, чтобы эти две петли были едины, но это работает для меня.

 <?php // This will get us a list of the categories that our Author has published in $author = get_query_var('author'); $categories = $wpdb->get_results(" SELECT DISTINCT(terms.term_id) as ID, terms.name, terms.slug, tax.description FROM $wpdb->posts as posts LEFT JOIN $wpdb->term_relationships as relationships ON posts.ID = relationships.object_ID LEFT JOIN $wpdb->term_taxonomy as tax ON relationships.term_taxonomy_id = tax.term_taxonomy_id LEFT JOIN $wpdb->terms as terms ON tax.term_id = terms.term_id WHERE posts.post_status = 'publish' AND posts.post_author = '$author' AND tax.taxonomy = 'category' ORDER BY terms.name ASC "); // This loop picks up categories foreach($categories as $category) : $catid = $category->ID; // Now, inside the loop, we need to count how many posts that the Author has published. $counter = "SELECT COUNT(*) FROM $wpdb->posts LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id) LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) WHERE $wpdb->term_taxonomy.term_id = $catid AND $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->posts.post_status = 'publish' AND post_author = '$author' "; $user_count = $wpdb->get_var($counter); echo '<div class="archive_author">' . $category->name . '<br/><span class="subcounter">' . $user_count . ' posts</span></div>'; endforeach; ?> 

В SQL существует функция count() , которая может подсчитывать количество строк. В вашем случае мы хотим количество сообщений, поэтому мы можем использовать COUNT(posts.id) , например:

 <?php $author = get_query_var('author'); $categories = $wpdb->get_results(" SELECT DISTINCT(terms.term_id) as ID, terms.name, terms.slug, tax.description, count(posts.id) AS `count` FROM $wpdb->posts as posts LEFT JOIN $wpdb->term_relationships as relationships ON posts.ID = relationships.object_ID LEFT JOIN $wpdb->term_taxonomy as tax ON relationships.term_taxonomy_id = tax.term_taxonomy_id LEFT JOIN $wpdb->terms as terms ON tax.term_id = terms.term_id WHERE posts.post_status = 'publish' AND posts.post_author = '$author' AND tax.taxonomy = 'category' ORDER BY terms.name ASC "); ?> <ul> <?php foreach($categories as $category) : ?> <li> <a href="<?php echo get_category_link( $category->ID ); ?>" title="<?php echo $category->name ?>"> <?php echo $category->name.'('.$category->count.') '.$category->description; ?> </a> </li> <?php endforeach; ?> </ul> 

Вы заметите, что я использовал и псевдоним, чтобы переименовать столбец count (иначе его имя было бы count(posts.id) – не очень практично). Я также удалил 1=1 в ГДЕ, потому что здесь это не полезно.

Обычно я использую этот плагин ( http://wordpress.org/plugins/author-profiles/ ) для отображения на боковой панели. И я думаю, этот код поможет любому

  <?php global $wpdb; $table_users.=$wpdb->base_prefix; $table_users.="users"; $table_posts.=$wpdb->base_prefix; $table_posts.="posts"; $fetch_authordata="SELECT count(p.post_author) as post1,c.id, c.user_login, c.display_name,c.user_nicename, c.user_email, c.user_url, c.user_registered FROM {$table_users} as c , {$table_posts} as p {$where} and p.post_type = 'post' AND p.post_status = 'publish' and c.id=p.post_author GROUP BY p.post_author order by post1 DESC limit {$author_numbers} "; $dispaly_authordata = (array) $wpdb->get_results("{$fetch_authordata}", object); foreach ( $dispaly_authordata as $author ) { $user = get_userdata($author->id); echo 'Display Name: '.$user->display_name; echo 'Post Count: '.$post_count = get_usernumposts($user->ID); } ?>