这是我的代码。它给出了一个给定作者发表的类别列表。但是,我非常希望在类别名称旁边有一个数字,告诉作者在不同类别中发布了多少帖子。谁知道一招?谢谢!
<?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;
?>
答案 0 :(得分:3)
我想通了......必须运行以分离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;
?>
答案 1 :(得分:1)
在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(posts.id)
- 不太实用)。
我还删除了WHERE中的1=1
,因为它在这里没用。
答案 2 :(得分:0)
我通常使用此插件(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);
}
?>