1

著者の詳細については、私はWP_Queryに「プロジェクト」を問い合わせています。 ACFリピータフィールドから作者を取得するときに、複数の作者が存在する場合は、その間に 'and'という単語を追加します。WP_Queryの途中でリセットカウント

これは単一プロジェクトでうまく動作しますが、すべてのプロジェクトをクエリすると、サブループ後にカウントがリセットされません。カウントをリセットする必要があるかどうか、リピータのアイテム数を数え、2より大きい場合はコードを実行する必要があるかどうかはわかりません。

いずれにしても、これを行う方法がわからないし、誰かが私にいくつかの指針を与えてくれると願っています。

<?php 
    $args = array(
'post_type' => 'showcase', 
'posts_per_page' => -1, 
'orderby' => 'rand', 
); 
$projects = new WP_Query($args); 
?> 
<?php if($projects->have_posts()) : ?> 
<?php while($projects->have_posts()) : $projects->the_post() ?> 
    // some content here 
     <?php $i==1; while(have_rows('project_author')): the_row(); ?> 
     <?php if($i ==1) 
     { 
     echo "and"; 
     }; ?> 
     <?php the_sub_field('screenwriters_name'); ?> 
     <?php $i++; endwhile; ?> 
<?php endwhile ?> 
<?php endif ?> 
<?php wp_reset_postdata(); ?> 

あなたは(ダブル等号の代わりに、単一の)代わりに代入演算子を使用する必要が$i 1に設定しようとするときは、等価演算子を使用している

+0

コメントの前に$ i == 1の文があります。//一部の内容は真です。私はあなたが1つの等号を削除する必要があると思います。 –

答えて

1

Thxを。

$iは、$i++を実行した後に1になるだけで、予期しない動作が発生します。 $iがコードの先頭で正しく1に設定されている場合、whileループ内のifステートメントは 'and'をループの最初の繰り返しで実行します。

私が使用しているロジックに見られる他の問題は、 'and'はリピータフィールドに何人の作家がいるかにかかわらず一度だけ出力されることです。

この問題にはいくつかの方法があります。

ソリューション1 - アップパッチ適用エラー

<?php while ($projects->have_posts()) : $projects->the_post(); ?> 

    <?php $i = 1; // fix assignment 

    while(have_rows('project_author')): the_row(); 

     // run on all iterations of the loop except the first. 
     if ($i > 1) { 
      echo ' and '; // add space before and after string. 
     } 

     the_sub_field('screenwriters_name'); 

     $i++; 
    endwhile; ?> 
<?php endwhile; ?> 

ソリューション2 - 配列としてフィールドを処理し、破を使用して()

このソリューションは、私にはクリーンな感じ。リピータ関数(have_rows()/the_row())を使用してループするのではなく、著者フィールドを配列として取得します。

<?php while ($projects->have_posts()) : $projects->the_post(); ?> 

    <?php $project_author = get_field('project_author'); 

    if ($project_author) { 

     // extract screenwriters_name values (the sub field name) from the fields array. 
     $screenwriter_names = array_column($project_author, 'screenwriters_name'); 

     // join elements of the array into a string. ' and ' is only used when more than one. 
     echo implode(' and ', $screeenwriter_names); 
    } ?> 
<?php endwhile; ?> 
+0

ありがとうナタン、最初のソリューションは完璧に働いた! – Renegade

関連する問題