我正在尝试创建一个author.php页面,该页面由出现在该页面上的作者调用自定义帖子类型。我的问题是,当使用下面的代码 - 对帖子类型'视频'进行过滤时 - 代码会输出所有自定义帖子类型,而不仅仅是“视频”。需要注意的是,当我删除数组的作者键和变量'author' => $author
时,其结果是允许代码从每个作者输出所需的自定义帖子类型“视频”。关于如何解决这个问题的任何想法?
使用的代码:
<?php
$args = array(
'post_type' => array( 'audio' ),
'posts_per_page' => 10,
'author' => $author
);
$author_videos = new WP_Query( $args );
if ( $author_videos->have_posts() ) : while ( $author_videos->have_posts() ) : $author_videos->the_post(); ?>
<p><a href="<?php echo get_permalink(); ?>"><?php the_title(); ?></a></p>
<?php endwhile;
wp_reset_postdata();
endif; ?>
答案 0 :(得分:0)
不需要新的WP_Query,您可以使用pre_get_posts
修改author.php
上的默认查询,将以下内容放入functions.php
:
add_action( 'pre_get_posts','so20175501_pre_get_posts' );
function so20175501_pre_get_posts( $query ) {
if ( ! is_admin() && $query->is_main_query() ) {
if ( $query->is_author ) {
$query->set( 'post_type', 'video' );
}
}
}
答案 1 :(得分:0)
我自己一直试图解决这个问题,并且发现如果你使用author__in
的单值数组作为作者ID,那么WP_Query似乎对它的处理方式不同,给你正确的结果
$args = array(
'post_type' => array( 'audio' ),
'posts_per_page' => 10,
'author__in' => array( $author )
);