我正在努力在类别页面上获得作者列表。我需要列出在该类别中至少写过5篇文章的作者。
我也需要标签中的类似内容。
任何想法如何在WordPress中做到这一点?
#1尝试这个。
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='http://www.srcmini.com/author/".$link."'>
".$name."<
/a>
\n";
endforeach;
}
#2唯一可能的情况是使用自定义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);
}
#3将以下代码添加到主题的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, 可以使用wordpress函数get_cat_ID获得。
你可以从主题中的任何位置调用此函数, 并根据需要显示作者。
注意:与自定义SQL函数相比, 这会占用更多资源。此外, 此功能可能会出现一些错误, 我在这里输入了它, 但未对其进行测试。
#4我使用查询后方法进行了一些简单的编码。
<
?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>
";
}
}
?>
【列出在WordPress的类别/标签中写了一定数量帖子的作者】我认为这可以帮助你解决问题。
推荐阅读
- 元查询比较元键是否在指定范围内
- javascript accordion / CSS无法正常工作
- 在我的WordPress主题文件中不断发现注入垃圾的PHP
- 在WordPress中,如何将自定义帖子类型的默认管理排序顺序设置为自定义列()
- 在首页的每第7个帖子和类别WordPress页面之间插入广告
- 在我的WordPress主题中,如何为博客页面添加分页()
- 在WordPress中包含Fullpage.js(或在一般情况下为JS)
- 迁移wordpress后图像未显示
- Flutter(GridPaper 示例#yyds干货盘点#)