I have a custom post type "building" and another custom post type "architect". Building are related to architects via an ACF relationship field.
In the single-architect page I want to display a list of the buildings that are associated to that particular architect.
So far I have achieved this by doing the following:
$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();
However this doese not seem very efficient and I am looking to introduce the relationship into the query itself, which I have tried by doing this:
$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; ?>
Which is not working, it does not return anything...
Can you see what am I doing wrong or do you have any other idea to approach this situation?
This is the solution that I'm currently using. I looks quite solid to me.
$buildings = new WP_Query(array(
'post_type' => 'building',
'posts_per_page' => -1,
'suppress_filters' => 0,
'meta_query' => array(
array(
'key' => 'architect',
'value' => '"'.$architect_id.'"',
'compare' => 'LIKE'
)
),
'order' => 'ASC',
'orderby' => 'title',
'post_status' => 'publish',
));
while ( $buildings->have_posts() ) {
$buildings->the_post();
// print title, content, or whatever here.
}