这是我从一个被抛弃的问题中重新得到的答案。我想这会帮你解决这个问题
默认情况下,所有自定义帖子类型都会从主查询中排除,这就是为什么在转到前端作者页面时看不到任何帖子的原因。要完成此操作,您需要修改主查询以包括这些职位类型。为此,您将使用pre_get_posts
行动挂钩。您还将使用条件标记is_author()
检查您是否在“作者存档”页面上。(我已经使用我的自定义帖子类型测试了这段代码event_type
和cameras
, 因此,只需相应地更改即可)
function custom_post_author_archive($query) {
if ($query->is_author() && $query->is_main_query() )
$query->set( \'post_type\', array(\'event_type\', \'cameras\', \'post\', \'page\') );
}
add_action(\'pre_get_posts\', \'custom_post_author_archive\');
为了解决后端的post count问题,我认为取消设置
posts
列,然后将其替换为一个新列,该列将统计所有帖子类型,即event\\u type、post和page。您可以相应地对此进行编辑
在这里,您将使用manage_users_columns
和manage_users_custom_column
这并没有很好的记录。
function add_extra_user_column($columns) { //Add CPT Column for events and remove default posts column
unset($columns[\'posts\']);
return array_merge( $columns,
array(\'foo\' => __(\'Posts\')) );
}
add_filter(\'manage_users_columns\' , \'add_extra_user_column\');
function add_post_type_column( $value, $column_name, $id ) { //Print event_type value
if( $column_name == \'foo\' ) {
global $wpdb;
$count = (int) $wpdb->get_var( $wpdb->prepare(
"SELECT COUNT(ID) FROM $wpdb->posts WHERE
post_type IN (\'event_type\', \'cameras\', \'post\', \'page\') AND post_status = \'publish\' AND post_author = %d",
$id
) );
if ( $count > 0 ) {
$r = "<a href=\'edit.php?author=$id\'>";
$r .= $count;
$r .= \'</a>\';
} else {
$r = 0;
}
return $r;
}
}
add_filter( \'manage_users_custom_column\', \'add_post_type_column\', 10, 3 );