2017-02-02 10 views
1

私はカスタムポストタイプ "building"と別のカスタムポストタイプ "architect"を持っています。ビルディングは、ACF関係フィールドを介して建築家に関連しています。ACF関係フィールドによるWordPressクエリ

1人の建築家のページで、その特定の建築家に関連付けられている建物のリストを表示したいとします。

これまでのところ、私は次のようにして、これを達成した:

$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

建築家のフィールドに複数の値を許可していますか?アーキテクトが1つの選択肢であれば、間違ったメタ問合せを使用しています(上記のメタ問合せは、データの格納方法のために複数選択にのみ適用されます)。 –

+0

@ NathanDawson architectは複数の選択を可能にする関係フィールドです –

答えて

0

これはACFのドキュメントに基づいて、1つのアーキテクト・ページで実行する必要があります(そのアーキテクトを表示するだけのループで、建物を取得する必要があるためです)。あなたがクエリにそれを基づかしている場合は、このの多くは、実際にあなたが関係を設定している途中にヒンジ結合され、より

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

?> 

よう

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

が、それは次のようになります。建築家のページにカスタムフィールドを表示してそこに建物を選択していますか?

+0

ありがとう@Aibrean。すべての建築家が私の「建物の追加」ページに表示される関係フィールドのリストを持っているので、新しい建物を追加するときに対応する建築家とリンクすることができます。 あなたのコードがopositeをasumeと言うことができるものについては、その建物は「建築家の追加」ページ内で選択されます。正しい? –

+0

あなたは理論的には両方を行うことができますが、建物を建築家のページに表示するには、そのページから建物を選択する必要があります。さもなければ、ACFを使用することは疑わしいので、分類法を使う方が良いでしょう。 – Aibrean

関連する問題