更新した記事のドコが更新されたのかを伝えたい!
あと、更新情報をトップページで表示をしたい!
こんな思いが実現したので覚書を記します。
イメージは↓↓のようなカンジ。
更新日付順に表示をしたかった。
理想
- ▼トップページに表示したい更新情報
- 2020/01/21 「投稿タイトルDDDDD」更新タイトル
- 2020/01/20 「投稿タイトルBBBBB」更新タイトル
- 2020/01/17 「投稿タイトルCCCCC」更新タイトル
- 2020/01/16 「投稿タイトルBBBBB」更新タイトル
- 2020/01/16 「投稿タイトルAAAAA」更新タイトル
上記を実現させるために、Advanced Custom FieldsのRepeater Fields(繰り返しフィールド)を使って以下のフィールドを作った。
これにより複数回の更新をした時でもドコを更新したのか細かく伝えられる。
Repeater Fields(繰り返しフィールドの中身
フィールド
update
サブフィールド
更新日時 update-time
更新タイトル update-title
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
<ul> <?php function my_posts_where( $where ) { $where = str_replace("meta_key = 'update_$", "meta_key LIKE 'update_%", $where); return $where; } add_filter('posts_where', 'my_posts_where'); $post_data = array(); $args = array( 'post_type' => 'post', 'category_name' => 'machine', 'meta_key' => 'update_$_update-time', 'posts_per_page' => 10, ); $query = new WP_Query( $args ); if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); if( have_rows('update') ): while ( have_rows('update') ) : the_row(); if ( get_sub_field('update-time') ) { $post_data[] = array( 'title' => get_the_title(), 'date' => get_sub_field('update-time'), 'updatetitle' => get_sub_field('update-title'), 'link' => get_permalink() ); } endwhile; endif; } } function subval_sort( $a, $b ) { if ( $a['date'] == $b['date'] ) return 0; return $a['date'] > $b['date'] ? -1 : 1; //「>」でソートを変更可能 } usort( $post_data, 'subval_sort' ); foreach ( $post_data as $post ) { echo '<li><h3>'; echo '<a href="'.$post['link'].'">'; echo $post['date'] . ' ' ; echo '「'.$post['title'] . '」' ; echo $post['updatetitle']; echo '</a></h3></li>'; } ?> </ul> <?php wp_reset_query(); ?> |