我有一个自定义的帖子类型" building"和另一个自定义帖子类型#34;架构师"。建筑通过ACF关系领域与建筑师相关。
在单一架构师页面中,我想显示与该特定架构师相关联的建筑物列表。
到目前为止,我通过以下方式实现了这一目标:
$loop = new WP_Query( array( 'post_type' => 'building', 'paged' => $paged, 'posts_per_page' => -1 ) );
if ( $loop->have_posts() ) : ?>
<ul>
<?php while ( $loop->have_posts() ) : $loop->the_post();
$building_name = get_the_title();
$building_link = get_the_permalink();
$architects = get_field('architect');
if( $architects ): ?>
<?php foreach( $architects as $post):?>
<?php setup_postdata($post);
if( get_the_title() == $architect_name ) { ?>
<li><a href="<?php echo $building_link; ?>"><?php echo $building_name ?></a></li>
<?php } ?>
<?php endforeach; ?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
<?php endwhile; ?>
</ul>
<?php endif;
wp_reset_postdata();
然而,这个doese看起来效率不高,我希望将这种关系介绍给查询本身,我试过这样做:
$buildings = get_posts(array(
'post_type' => 'building',
'meta_query' => array(
array(
'key' => 'architect',
'value' => '"' . get_the_ID() . '"',
'compare' => 'LIKE'
)
)
));
<?php if( $buildings ): ?>
<ul>
<?php foreach( $buildings as $building): ?>
<li><a href="<?php echo get_permalink( $building->ID ); ?>"><?php echo get_the_title( $building->ID ); ?></a></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
哪个不起作用,它不会返回任何内容......
你能看出我做错了什么,或者你有任何其他想法来解决这个问题吗?
答案 0 :(得分:0)
这样的事情应该在单一的架构师页面上进行(因为你已经在循环中只显示那个建筑师而你需要得到建筑物)......基于ACF文档。
<?php
$posts = get_field('building');
if( $posts ): ?>
<ul>
<?php foreach( $posts as $p ): // variable must NOT be called $post (IMPORTANT) ?>
<li>
<a href="<?php echo get_permalink( $p->ID ); ?>"><?php echo get_the_title( $p->ID ); ?></a>
<span>Custom field from $post: <?php the_field('author', $p->ID); ?></span>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
如果你基于查询,那就更像是
<?php
$ids = get_field('building', false, false);
$query = new WP_Query(array(
'post_type' => 'architect',
'posts_per_page' => -1,
'post__in' => $ids,
'post_status' => 'any',
'orderby' => 'post__in',
));
?>
这很大程度上取决于你建立关系的方式。您是否在建筑师页面上显示自定义字段并在那里选择建筑物?