サポート » プラグイン » Custom Field Suite でループ項目のn番目の画像があるかどうかでの条件分岐での不具合について

  • 解決済 asako

    (@asako08)


    カスタム投稿の投稿ページで Custom Field Suite を使い、画像をループで取得しています。
    詳細ページでは、画像をスライド表示する為、bxSlider を使用しています。
    bxSlider でスライド画像のサムネイルが表示されるように以下のように記述しておりましたが、画像が1枚だけの時は、サムネイルが表示されないようにしたく、記述を変更しました。

    ●変更前

    <?php if(!empty( CFS()->get( 'works_slide_grp' ) )) : ?>
    <div class="bxslider-worksWrap">
      <ul class="bxslider-works">
    	<?php
    	$works_slide_grp = CFS()->get( 'works_slide_grp' );
    	  foreach($works_slide_grp as $works_slide) {
    		$works_slide_img_id = $works_slide['works_slide_img'];
    		$works_slide_img_value = wp_get_attachment_image_src( $works_slide_img_id, 'large' );
    		echo '<li><img src="'.$works_slide_img_value[0].'" alt=""></li>';
    	  }
    	?>
      </ul>
    
      <div class="bx-pager clearfix">
    	<?php
    	$works_slide_grp2 = CFS()->get( 'works_slide_grp' );
    	  $i = 0;
    	  foreach($works_slide_grp2 as $works_slide2) {
    		$works_slide_img_id2 = $works_slide2['works_slide_img'];
    		$works_slide_img_value2 = wp_get_attachment_image_src( $works_slide_img_id2, 'thumbnail' );
    		echo '<a data-slide-index="'.$i.'" href=""><img src="'.$works_slide_img_value2[0].'" alt=""></a>';
    		$i++;
    	  }
    	?>
      </div>
    </div>
    <?php endif; ?>

    ●変更後

    <?php if(!empty( CFS()->get( 'works_slide_grp' ) )) : ?>
    <div class="bxslider-worksWrap">
      <ul class="bxslider-works">
    	<?php
    	$works_slide_grp = CFS()->get( 'works_slide_grp' );
    	  foreach($works_slide_grp as $works_slide) {
    		$works_slide_img_id = $works_slide['works_slide_img'];
    		$works_slide_img_value = wp_get_attachment_image_src( $works_slide_img_id, 'large' );
    		echo '<li><img src="'.$works_slide_img_value[0].'" alt=""></li>';
    	  }
    	?>
      </ul>
    
    <?php
    $works_slide_grp3 = CFS()->get( 'works_slide_grp' );
    $works_slide_img_no1 = $works_slide_grp3[1]['works_slide_img'];
    if (!empty($works_slide_img_no1)) :
    ?>
      <div class="bx-pager clearfix">
    	<?php
    	$works_slide_grp2 = CFS()->get( 'works_slide_grp' );
    	  $i = 0;
    	  foreach($works_slide_grp2 as $works_slide2) {
    		$works_slide_img_id2 = $works_slide2['works_slide_img'];
    		$works_slide_img_value2 = wp_get_attachment_image_src( $works_slide_img_id2, 'thumbnail' );
    		echo '<a data-slide-index="'.$i.'" href=""><img src="'.$works_slide_img_value2[0].'" alt=""></a>';
    		$i++;
    	  }
    	?>
      </div>
    <?php endif; ?>
    
    </div>
    <?php endif; ?>

    以下の部分が追加したコードです。

    <?php
    $works_slide_grp3 = CFS()->get( 'works_slide_grp' );
    $works_slide_img_no1 = $works_slide_grp3[1]['works_slide_img'];
    if (!empty($works_slide_img_no1)) :
    ?>

    記述の変更後、新たに投稿したものは画像が1枚だけの時は、サムネイルが表示されず、画像が2枚以上の場合のみサムネイルが表示されるというように正常に動作しています。
    しかし、記述変更前の投稿で、タイトルが同じものがいくつかあり、それらに関して画像が複数あるのにサムネイルが表示されないという不具合が出ています。
    スラッグ が以下のようになっており、
    1. https://www.xxx.com/works/test/
    2. https://www.xxx.com/works/test-2/
    3. https://www.xxx.com/works/test-3/
    1の方に関しては正常にだが、2と3の方で不具合が出ている、というような状況です。
    尚、投稿には複製出来るようDuplicate Postを使用しており、不具合の出ている投稿をコピーし、新たに画像を登録し直しても、不具合は直りません。
    上記以外にも、タイトルが同じものに関して、画像が1枚の場合でもサムネイルが表示されてしまっていたものがあり、それに関しては画像を登録し直したらサムネイルの表示が消えました。

    テンプレートの記述変更後に関しては、タイトルが同じものでも正常に動作するのですが、具体的に内部のどの部分で不具合が出ているかなどご教授いただけますでしょうか?
    新たに追加したコードの記述に問題があるのでしょうか?どうぞよろしくお願いいたします。

    • このトピックはasakoが5年、 8ヶ月前に変更しました。
5件の返信を表示中 - 1 - 5件目 (全5件中)
  • こんにちは

    Custom Field Suite のループの配列はインデックスが歯抜けになる場合があるようです。
    配列数で条件分岐するのがいいかと思います。

    $works_slide_img_no1 = $works_slide_grp3[1]['works_slide_img'];
    if (!empty($works_slide_img_no1)) :

    if ( count( (array)$works_slide_grp3 ) > 1 ):

    トピック投稿者 asako

    (@asako08)

    ishitaka (@ishitaka)様

    ご回答ありがとうございます!!
    教えていただいた記述でうまく表示されました。

    あと、ご回答いただいた中で
    > Custom Field Suite のループの配列はインデックスが歯抜けになる場合があるようです。
    という部分が気になったのですが、例えばループ画像の1つ目を一覧ページのサムネイルとして表示するように以下のように記述していた場合なども、やはりうまく動作しない可能性があるということでしょうか?

    <?php
    $group = SCF::get( 'group' );
    $image = $group[0]['image'];
    $image_attr = wp_get_attachment_image_src( $image, 'medium' );
    ?>
    <img src="<?php echo $image_attr[0]; ?>" alt="">
    トピック投稿者 asako

    (@asako08)

    質問者です。追記させていただきます。

    表示が上手くいかなかったページの画像を var_dump で調べてみると、確かにインデックスが12からになっていたり、ずれている感じでした。
    これは、Custom Field Suite のバグなのでしょうか…?
    Duplicate Post との併用が原因の可能性もありますか?

    ループの最初の項目を削除した場合、インデックス 0 が存在しないので取得に失敗 (Undefined offset) します。
    インデックスを使用する場合は、インデックスを詰めるといいかと思います。

    インデックスを詰める例:
    $group = array_values( (array)$group );

    Custom Field Suite のバグなのでしょうか…?

    バグなのか仕様なのかは・・・分かりません。たぶん仕様だと思います。

    Duplicate Post との併用が原因の可能性もありますか?

    Duplicate Post をインストールしていなくても同じ現象(歯抜け)になります。おそらく関係はないと思います。

    トピック投稿者 asako

    (@asako08)

    ishitaka (@ishitaka)様

    ありがとうございました!
    インデックスを詰める方法、教えていただき大変参考になりました!

    教えていただいたコードで試してみたところ、確かに綺麗にインデックスが詰まりました。

    インデックスが歯抜けになるということで、別のカスタムフィールドプラグインを検討しようかと思っていましたが、これで解決できて良かったです。

    勉強不足でまだまだPHPの記述についても未熟なのですが、今回教えていだいたコード、大変勉強になりました。本当に助かりました。
    どうもありがとうございました!

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「Custom Field Suite でループ項目のn番目の画像があるかどうかでの条件分岐での不具合について」には新たに返信することはできません。