質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

4048閲覧

【WordPress】同じループの中で同じポストを複数表示したい。【ACF】

hyperitakdx

総合スコア27

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/03/02 09:55

編集2017/03/03 01:02

お世話になります、hyperitakdxです。
今回初めて質問させていただきます。
現在WordPressサイトの機能追加案件をおこなっているのですが
手詰まりになってしまい周りに詳しい人もおらず大変困ってます。
なんとかご教授願えればと思います。

###前提・実現したいこと
WordPressの固定ページで動画一覧を作成しています。
AdvancedCustomField::Repeater(以下ACF:R)を使用して
ポストへのカスタムフィールドを追加し動画を複数登録できるようにしています。
階層 key 属性
field movie-group repeater
L subfield movie-category selectbox
L subfield movie-title text
L subfield movie-code text

query_posts($args)を使用して条件にあったポストを取得し
同一のポストであっても複数の動画が登録されている場合それぞれ一覧に表示したいです。
理想としては同一ポストであれば並んで表示されるようになっていれば最高です。
妥協としては2つのループに分けてそれぞれで取得して大きくmovie-categoryで出し分けられればと思います。

###問題点
そもそも一つのポストを2回も3回も1つのループの中で取得できるのかが不明。
ACF:Rでrepeaterでフィールドを追加した際、query_posts($args)でのsub_fieldの取得の仕方が分からない。

###該当のソースコード

php

1<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 2 <h1 class="company-page-title"><?php the_title(); ?></h1> 3 <?php 4 $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 5 $args = array( 6 'posts_per_page' => 20, //企業情報を20件取得 7 'paged' => $paged, 8 'post_type' => 'company', // 企業情報のポストを取得 9 10 'meta_query' => array( 11 'relation' => 'AND', 12 array( 13 'key' => 'movie-group', 14 'value' => true, 15 ), 16 array( //sub_fieldの値の取得が分からない 17 'key' => 'movie-category', 18 'value' => array('specail', 'intarnship'), 19 ), 20 ), 21 ); 22 query_posts($args); 23 ?> 24 <?php if (have_posts()):while (have_posts()):the_post(); ?> 25 /***省略***/ 26 <?php endwhile; 27 endif; ?> 28 <?php wp_reset_postdata(); 29 wp_reset_query(); ?> 30 <?php endwhile; ?> 31<?php endif; ?>

###試したこと
下記コードで単純に動画のあるポストの絞り込みは成功いたしました。

php

1$args = array( 2 'posts_per_page' => 20, //企業情報を20件取得 3 'paged' => $paged, 4 'post_type' => 'company', // 企業情報のポストを取得 5 'meta_key' => 'movie-group', //ACF:Rのgroup 6 'meta_value' => true //movie-groupに記入があるとき 7);

###補足情報(言語/FW/ツール等のバージョンなど)
WordPress v4.7.2
PHP v7.1.1

WordPressプラグイン
Advanced Custom Fields v4.4.11
Advanced Custom Fields: Repeater Field v1.1.1

以上です。
そもそも可能なのか、不可能であれば別の方法がないか知りたいです。
一つ自分の中で手がかりがあるとすればgroup内のrowの数分さらにループをかけたりしたらどうなるかというところです。
構想はあるのですがコードにできず…
どうぞよろしくお願いいたします。

参考:https://www.advancedcustomfields.com/resources/query-posts-custom-fields/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

  • ACFのRepeaterでのsub_fieldの取得の仕方は、ACFの公式ドキュメントに書かれています。
  • テンプレートファイル内でループを作成するときは、通常get_posts()もしくはWP_Queryを使います。
  • 最終的にどのような出力を期待されているのかがわかりませんが、全体的なつくりは以下のようになると思います。

PHP

1<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 2 <h1 class="company-page-title"><?php the_title(); ?></h1> 3 <?php 4 $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 5 6 $args = array( 7 'posts_per_page' => 20, //企業情報を20件取得 8 'paged' => $paged, 9 'post_type' => 'company', // 企業情報のポストを取得 10 'meta_key' => 'movie-group', //ACF:Rのgroup 11 'meta_value' => true //movie-groupに記入があるとき 12 ); 13 14 // 動画が登録されている"company"投稿タイプの投稿を取得 15 $the_query = new WP_Query( $args ); 16 17 if ( $the_query->have_posts() ) { 18 while ( $the_query->have_posts() ) { 19 // "company"投稿タイプの投稿を1件ずつ処理 20 $the_query->the_post(); 21 22 // サブフィールド表示 23 // the_sub_field()やget_sub_field()で取得して、表示する 24 25 // if( have_rows('movie-group') ): 26 // while( have_rows('parent_field') ) : the_row(); 27 // ?> 28 // <p><?php the_sub_field('movie-category'); ?></p> 29 // <p><?php the_sub_field('movie-title'); ?></p> 30 // <p><?php the_sub_field('movie-code'); ?></p> 31 // <?php 32 // endwhile; 33 // endif; 34 } 35 } else { 36 // no posts found 37 } 38 wp_reset_postdata(); 39 40 <?php endwhile; ?> 41<?php endif; ?>

投稿2017/03/06 08:48

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問