サポート » プラグイン » ACFのグループフィールドの条件分岐について

  • 解決済 no23h

    (@no23h)


    advanced custom fieldで、
    投稿に共著者名を入力するグループフィールドを3名分設定しています。
    もし1つも入力がなければ、出力先をネストしているdiv.coauthor自体を
    表示しないようにしたいのですが、if文の書き方がわかりません。

    以下コードです。

    <?php
    $group1 = get_field('name_1');
    $group2 = get_field('name_2');
    $group3 = get_field('name_3');
    ?>
    
    <?php
    // 3つのグループに入力がなければ、.coauthorを非表示に
    ?>
    <div class="coauthor">
      <p>共著者</p>
      <?php
      if($group1){
        echo $group1['name_1_last'];
        echo $group1['name_1_first'];
      }
      ?>
      <?php
      if($group2){
        echo $group2['name_2_last'];
        echo $group2['name_2_first'];
      }
      ?>
      <?php
      if($group3){
        echo $group3['name_3_last'];
        echo $group3['name_3_first'];
      }
      ?>
    </div>

    単体フィールドであれば、

    <?php
    $txt = get_field('txt');
    if($txt){ ?>
    <p>hoge</p>
    <p><? echo $txt; ?></p>
    <? } ?>

    このような書き方で実現できていましたが、
    グループ+複数フィールドでの条件分岐の書き方が分からず困っております。

    お詳しい方、ヒントをいただけないでしょうか。
    よろしくお願いいたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • これでどうでしょうか

    <?php
    if( $group1 || $group2 || $group3 ) {
    ?>

    @munyagu さま

    ご返信ありがとうございます。

    以下のコードで試してみましたがだめでした。

    <?php
    $group1 = get_field('name_1');
    $group2 = get_field('name_2');
    $group3 = get_field('name_3');
    ?>
    
    <?php
    if( $group1 || $group2 || $group3 ) {
    ?>
    <div class="coauthor">
      <p>共著者</p>
      <?php
      if($group1){
        echo $group1['name_1_last'];
        echo $group1['name_1_first'];
      }
      ?>
      <?php
      if($group2){
        echo $group2['name_2_last'];
        echo $group2['name_2_first'];
      }
      ?>
      <?php
      if($group3){
        echo $group3['name_3_last'];
        echo $group3['name_3_first'];
      }
      ?>
    </div>
    <?php
    }
    ?>

    .coauthorと<p>共著者</p>が残る状態になります。
    親グループに対してのget_field()は条件分岐に使えないのでしょうか…

    <?php
    if( ! empty( $group1 ) || ! empty( $group2 ) || ! empty( $group3 ) ) {
    ?>

    ではどうでしょうか?

    ダメだったら、

    var_dump( $group1 );
    var_dump( $group2 );
    var_dump( $group3 );
    

    の結果を教えてください。

    グループフィールドは連想配列で返されるので、連想配列の中身が空かどうかをチェックすることになります。

    例:

    if ( ! empty( array_filter( $group1 + $group2 + $group3 ) ) ) {

    または、

    if ( ! empty( array_filter( $group1 ) ) || ! empty( array_filter( $group2 ) ) || ! empty( array_filter( $group3 ) ) ) {

    もう1例

    if (
    	$group1['name_1_last'] ||
    	$group1['name_1_first'] ||
    	$group2['name_2_last'] ||
    	$group2['name_2_first'] ||
    	$group3['name_3_last'] ||
    	$group3['name_3_first']
    ) {

    value が空の連想配列が落ちてくるんですね。

    だとすると、
    if($group1){
    などもうまく動いているわけではなく、

    echo $group1['name_1_last'];
    echo $group1['name_1_first'];

    が空文字列を出力しているだけなので、
    if( $group1['name_1_last'] || $group1['name_1_first'] ){
    などに変えた方がいいかもしれません。

    @munyagu
    @ishitaka

    ありがとうございます!
    グループは連想配列なのですね。
    私には難しいですが勉強して覚えていきます。

    最終的に以下のコードで理想の出力になりました。
    感謝申し上げます。

    <?php
    $group1 = get_field('name_1');
    $group2 = get_field('name_2');
    $group3 = get_field('name_3');
    ?>
    
    <?php
    if ( ! empty( array_filter( $group1 + $group2 + $group3 ) ) ) {
    ?>
    <div class="coauthor">
      <p>共著者</p>
      <?php
      if( $group1['name_1_last'] || $group1['name_1_first'] ){
        echo $group1['name_1_last'];
        echo $group1['name_1_first'];
      }
      ?>
      <?php
      if( $group2['name_2_last'] || $group2['name_2_first'] ){
        echo $group2['name_2_last'];
        echo $group2['name_2_first'];
      }
      ?>
      <?php
      if( $group3['name_3_last'] || $group3['name_3_first'] ){
        echo $group3['name_3_last'];
        echo $group3['name_3_first'];
      }
      ?>
    </div>
    <?php
    }
    ?>
    • この返信は4ヶ月、 3週前にno23hが編集しました。
7件の返信を表示中 - 1 - 7件目 (全7件中)
  • このトピックに返信するにはログインが必要です。