【发布时间】:2017-06-20 01:05:48
【问题描述】:
我有一个自定义帖子类型“建筑”和另一个自定义帖子类型“建筑师”。建筑通过 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();
但是这似乎不是很有效,我希望将关系引入查询本身,我已经尝试这样做:
$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; ?>
这不起作用,它不会返回任何东西......
你能看出我做错了什么吗?或者你有什么其他想法来解决这种情况?
【问题讨论】:
-
您在 ACF 字段中调用的位置是什么?我没有看到任何遵循传统文档模式的内容 (advancedcustomfields.com/resources/relationship)
-
您的架构师字段是否允许多个值?如果架构师是单选,则说明您使用了错误的元查询(由于数据的存储方式,上述元查询仅适用于多选)。
-
@NathanDawson 建筑师是一个允许多选的关系字段
-
@Aibrean 在我的第二个示例中,我试图按照此链接advancedcustomfields.com/resources/querying-relationship-fields 遵循官方 ACF 文档
-
@GuillermoCarone 你找到解决方案了吗? ACF 代码无法正常工作。
标签: php mysql wordpress advanced-custom-fields