2017-02-02 58 views
1

我有一个自定义帖子类型“建筑”和另一个自定义帖子类型“架构师”。建筑通过ACF关系领域与建筑师相关。ACF关系字段的WordPress查询

在单建筑师页面中,我想显示与特定建筑师关联的建筑物列表。

到目前为止,我已经这样做实现了这个以下:

$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; ?> 

这是不工作的,它不返回任何东西......

你能看到我在做什么错误或者你有什么其他的想法接近THI情况?

+0

你在ACF领域打电话?我没有看到任何遵循传统文档模式的东西(https://www.advancedcustomfields.com/resources/relationship/) – Aibrean

+0

您是否允许您的架构师领域有多个值?如果架构师是一个单一的选择,您使用的是错误的元查询(上面的元查询仅适用于多选,因为存储数据的方式)。 –

+0

@NathanDawson建筑师是一个关系领域,允许多个选择 –

回答

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', 
)); 

?> 

很多这对你建立关系的方式实际上是铰链。您是否在建筑师页面上显示自定义字段并在那里选择建筑物?

+0

谢谢@Aibrean。我有一个关系字段列出了所有在我的“添加建筑”页面中显示的建筑师,因此当我添加一个新建筑时,我可以将其与相应的建筑师链接起来。 我可以告诉你的代码包含相反的内容,这些建筑物是在“添加建筑师”页面中选择的。正确? –

+0

理论上你可以同时做这两件事,但是如果你想让建筑物显示在建筑师页面上,那么建筑物必须从该页面中选择。否则使用ACF是没有意义的,你最好用分类法。 – Aibrean