サポート » プラグイン » advanced custom fieldsのRepeater Fieldで表示件数を制御したい

  • 解決済 komatterwww

    (@komatterwww)


    
    <?php if(have_rows('repeater_field_name')): ?>
     <?php while(have_rows('repeater_field_name')): the_row(); ?>
      <?php the_sub_field('sub_field_name'); ?>
     <?php endwhile; ?>
    <?php endif; ?>
    

    上記のようなコードでリピーターフィールドで入力したものは『全て』表示できますが、
    『全て』ではなく、例えばTOPページでこれらから10件だけ抽出して表示したい場合どのようなコードをかけばよいのでしょうか。

    イメージとしては、
    query_postsのpost_per_page
    みたいな処理で抽出する数を制御したいです。

    どなたかわかる方おりますか?
    この一週間ググりまくりましたが一向に答えに辿り着けません。

    そもそもadvanced custom fieldのrepeater fieldではこのような事は不可能なのでしょうか。

    どうかお願いします。

    • このトピックはkomatterwwwが6年、 9ヶ月前に変更しました。
10件の返信を表示中 - 1 - 10件目 (全10件中)
  • 10の値を変更すれば表示数を変更できます。

    <?php
    $i = 0;
    if( have_rows( 'repeater_field_name' ) ):
    	while( have_rows( 'repeater_field_name' ) ):
    		the_row();
    		$i++;
    		if( $i > 10 ) {
    	break;
    }
    	the_sub_field( 'sub_field_name' ); 
    	endwhile;
    endif;
    ?>
    トピック投稿者 komatterwww

    (@komatterwww)

    凄いです!
    出来ました!!!!!
    本当にありがとうございますm(_)m

    トピック投稿者 komatterwww

    (@komatterwww)

    manboさん

    さきほどはとても助かりました。感謝です。
    重ねての質問で大変恐縮でございますが、

    
    <?php
    $i = 0;
    if( have_rows( 'repeater_field_name' ) ):
    	while( have_rows( 'repeater_field_name' ) ):
    		the_row();
    		$i++;
    		if( $i > 10 ) {
    	break;
    }
    	the_sub_field( 'sub_field_name' ); 
    	endwhile;
    endif;
    ?>
    

    の例に続き、
    リピートフィールドが複数ある場合の抽出方法ってあるのでしょうか?
    repeater_field_name_A + repeater_field_name_B
    の中から、sub_field_name_A + sub_field_name_B を合計10件
    取り出したいという場合です。

    どうかお願いいたします。

    各々を5件だけ出力すれば良いだけでは?

    トピック投稿者 komatterwww

    (@komatterwww)

    manboさん

    仰るとおりなのですが、
    repeater_field_name_A
    repeater_field_name_B
    は確実にsub_field_nameを持っていると限らず、
    repeater_field_name_Aが1つでrepeater_field_name_Bが9つかもしれませんし、
    repeater_field_name_Aが9つでrepeater_field_name_Bが1つかもしれない
    といった状況なのです

    トピック投稿者 komatterwww

    (@komatterwww)

    manboさん

    度々ご回答頂きありがとうございました。
    とても助かりました。
    上記の件はうまいこと妥協点を見つけシステムの仕様を変更することで
    解決していきたいと思います。

    ありがとうございました!

    komatterwww さん

    配列関数使えば、自由に取り出せますよ。
    http://php.net/manual/ja/function.array-slice.php

    トピック投稿者 komatterwww

    (@komatterwww)

    photographer hiro.さん

    なるほどです、ありがとうございます!
    参考サイトを参照してチャレンジしてみます!

    komatterwwwさん

    補足説明です。

    ループ内において

    
    $sub_field[] = get_sub_field( 'sub_field_name_A' );
    $sub_field[] = get_sub_field( 'sub_field_name_B' );
    

    又は

    
    $sub_field[] = <li class="list_a">.esc_html(get_sub_field( 'sub_field_name_A' )).'</li>'.PHP_EOL;
    $sub_field[] = <li class="list_b">.esc_html(get_sub_field( 'sub_field_name_B' )).'</li>'.PHP_EOL;
    
    //「PHP_EOL」はソース内の改行コードです。
    

    みたいな書き方でも構いません
    ※「the(表示関数)」ではなく「get(取得関数)」で必ずお子案ってください。

    として定義すると「[]」を付けたので配列のして定義されます。

    注意としてループ間にかならずリセットが必要

    //ループ前(whileやforeachの前にリセット)
    $output = array();
    $sub_field = array();

    
    //ループ外(ループ終了後)
    if($sub_field):
    $output = array_slice($sub_field, 0, 9);   // 0~9番目つまり10件
    $output_tag = 
    '<ul>'.
    $output.
    '</ul>';
    
    echo $output_tag;
    
    endif;
    
    

    みたいな考え方で、つないであげると
    ワードプレスだからここまでしかできないみたいな制限が少なくなりますよ。

    考え方的なところを参考にして頂けると幸いです。

    トピック投稿者 komatterwww

    (@komatterwww)

    photographer hiro.さん

    なるほどです、度々助言頂き非常に助かっています。
    photographer hiro.さんの助言を参考に頑張ってみます!
    ありがとうございます!

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • トピック「advanced custom fieldsのRepeater Fieldで表示件数を制御したい」には新たに返信することはできません。