可能你做错了。
当你需要一对多的关系时(一个作者有很多书),分类法不是最好的方法。
此外,根据WordPress的结构,以相同的方式命名分类法和帖子并不是一种非常可靠的方式。
举个例子,如果两个作者是同音词:两个作者都叫“John Smith”是完全正常的,在这种情况下,WordPress将为分类术语和post slug分配唯一的slug,但对于您来说,在创建post时很难分配正确的分类术语。
最好的方法是为book post类型创建一个自定义字段,您可以将其命名为“author\\u id”,并在创建book post期间插入righr post id,然后在book page中使用:
$author_id = get_post_meta( $post->ID, \'author_id\', true );
$author_post = get_post($author_id);
当然这不是很好的解决方案,但是
creating a custom metabox 要设置显示作者帖子下拉列表的元字段,很容易,而且很美观。
如果需要有关创建metabox的帮助,请查看questions tagged metabox 在此网站中。
作为替代方案,您还可以考虑著名的插件Post 2 Posts 这将为你做这项工作。
回答您的问题,您的第二个代码块几乎是正确的,工作版本(应该工作的版本)是:
global $post;
$bookauthor = wp_get_post_terms( $post->ID, \'author\' );
if ( ! empty($bookauthor) ) {
$slug = array_shift( $bookauthor );
$custom_query = new WP_Query( array( \'post_type\' => \'author\',\'name\' => $slug->slug ) );
// here your loop
while ( $custom_query->have_posts() ) { $custom_query->the_post();
// here post output
}
wp_reset_postdata();
}
这是因为IIRC
wp_get_post_terms
使用术语ID作为数组键返回数组。
但是,如前所述,我认为这不是正确的方法。