サポート » プラグイン » Advanced Custom Field「Repeater Field」の表示順を逆にしたい

  • 解決済 simejikinoko

    (@simejikinoko)


    固定ページにRepeater Field(有料アドオン)でギャラリーを出力しています。
    やりたいことは、追加していったものをDESC(降順)で並べたいです。
    デフォルトはASC(昇順)で管理画面の見た目と同様、古いものから並んでいますが、
    出力のときには最新のものを上にしたいです。

    手動のドラッグドロップで動かせますが、数が多くなってくるとスクロールが大変になると思うので、orderbyのようになにか命令でできないかと思うのですが、これは可能でしょうか?

    array_multisortを使って表示順を逆にしてるという、このサイトを参考にして書いてみたんですが、逆表示がうまくできませんでした。
    http://web-taiyo.com/works/130510-2.html


    <?php if( get_field(‘gallery’) ): ?>
    <?php while(the_repeater_field(‘gallery’)): ?>

    <?php $repeater = get_field(‘gallery’);
    $column_id = array();
    foreach( $repeater as $key => $row )
    {
    $column_id[ $key ] = $row;
    }
    array_multisort( $column_id, SORT_DESC, $repeater );
    ?>

    <?php
    $attachment_id = get_sub_field(‘flower_img’);
    $size = “custom-image”; // (thumbnail, medium, large, full or custom size)
    $image = wp_get_attachment_image_src( $attachment_id, ‘gallery-image’ );
    $attachment = get_post( get_sub_field(‘flower_img’) );
    ?>


    <?php endwhile; ?>

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター gatespace

    (@gatespace)

    http://www.advancedcustomfields.com/resources/field-types/repeater/

    公式のこのページのBasic Loop (PHP foreach loop) を参考に途中で
    array_reverse() を使う
    http://jp2.php.net/manual/ja/function.array-reverse.php

    未検証ですが

    <?php 
    
    $rows = get_field('gallery');
    if($rows) {
    
    	$rows = array_reverse($rows);
    
    	foreach($rows as $row) {
    		// この辺はループの中身なので適宜書き換えること
    		$attachment_id = $row['flower_img'];
    		$image = wp_get_attachment_image_src( attachment_id, 'gallery-image' );
    		// url = $image[0];
    		// width = $image[1];
    		// height = $image[2];
    ?>
    <img src="<?php echo $image[0]; ?>" />
    	}
    
    }

    トピック投稿者 simejikinoko

    (@simejikinoko)

    ありがとうございます。
    array_reverse()という便利なものがあるんですね!
    教えていただいたコードを参考に下記のように記述しまして、get_field(‘gallery’)自体は逆表示できました。
    tableで囲った中に、画像、花の名前、コメントをいれています。
    画像は表示されているのですが、その下の他のthe_sub_Fieldが出力されなくなってしまいました。
    <?php the_sub_field('flower_name'); ?><?php the_sub_field('flower_comment'); ?>のところです。
    tableの中の画像の部分はいじってなくて表示されたので、これもそのままできると思ってたんですが・・・。

    <?php $rows = get_field('gallery');?>
    <?php if($rows):?>
    <?php $rows = array_reverse($rows);?>
    
    <?php foreach($rows as $row) {
    		// この辺はループの中身なので適宜書き換えること
    		$attachment_id = $row['flower_img'];
    		$image = wp_get_attachment_image_src( $attachment_id, 'gallery-image' );
    	    $size = "custom-image"; // (thumbnail, medium, large, full or custom size)
    	    $attachment = get_post( get_sub_field('flower_img') );
    		// url = $image[0];
    		// width = $image[1];
     		// height = $image[2];
    ?>
    
    <table class="gallery_box">
      <tr>
        <th colspan="2"><a href="<?php echo wp_get_attachment_url( get_sub_field( 'flower_img',$post->ID) ); ?>" rel="lightbox"><img src="<?php echo $image[0]; ?>" width="<?php echo $image[1]; ?>" height="<?php echo $image[2]; ?>"/></a>
    </th>
      </tr>
      <tr>
        <th>花の名前</th>
        <td class="b"><?php the_sub_field('flower_name'); ?></td>
      </tr>
      <tr>
        <th colspan="2">コメント:<?php the_sub_field('flower_comment'); ?></th>
      </tr>
    </table>
    
     <?php  	}?>
             <?php endif; ?>
    トピック投稿者 simejikinoko

    (@simejikinoko)

    すみません。よく調べたらtable内のサムネイル画像は表示されていて、
    ライトボックスの画像へのリンクはロード表示のままで画像が読み込まれませんでした。

    <th colspan="2"><a href="<?php echo wp_get_attachment_url( get_sub_field( 'flower_img',$post->ID) ); ?>" rel="lightbox"><img src="<?php echo $image[0]; ?>" width="<?php echo $image[1]; ?>" height="<?php echo $image[2]; ?>"/></a>
    </th>

    get_sub_fieldthe_sub_fieldのところを何かに変えなきゃいけないということでしょうか。

    トピック投稿者 simejikinoko

    (@simejikinoko)

    何度もすみません、ちょっと気が急いてました。
    あと関係ない(get_fieldの順番だけだろう)と思っていて長かったので1番目の投稿で「略」してしまった部分も改変が必要なところだったんですね。情報を小出しにしてすみませんでした。

    http://www.advancedcustomfields.com/resources/field-types/repeater/
    ここをもう一度見直しまして、下記のように変更して出力されました。
    <?php echo $row['フィールド名']; ?>のようにする
    <td class="b"><?php echo $row['flower_name']; ?></td>

    サムネイルからのライトボックスは、ループの中身のところに下記を付けたし、
    $imageF = wp_get_attachment_image_src( $attachment_id, 'full' );

    hrefの中身を下記のように変更してフル画像を読み込むことができました。

    <th colspan="2"><a href="<?php echo $imageF[0]; ?>" rel="lightbox"><img src="<?php echo $image[0]; ?>" width="<?php echo $image[1]; ?>" height="<?php echo $image[2]; ?>"/></a>
    </th>

    教えていただいたarray_reverse()whileを用いたループ構文の中では使えないのでしょうか?whileforeachの使い分けがまだあんまりわかりません。

    でも聞いてよかったです。出来なかったら手動でせこせこ順番を替えるはめになっていました;
    ありがとうございました!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「Advanced Custom Field「Repeater Field」の表示順を逆にしたい」には新たに返信することはできません。