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

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

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

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

Q&A

解決済

1回答

2486閲覧

pre_get_postsを使うとACFの関連が表示されない

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

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

0グッド

0クリップ

投稿2017/04/08 11:27

編集2017/04/09 11:32

カスタム投稿タイプに年別アーカイブに強制的に複数のカスタム投稿タイプを表示しています。

一部カスタム投稿タイプにACFリピーターで関連を使用しているのですが、
ACFリピーターを使用しているカスタム投稿タイプのみアーカイブで最新1件(この場合はASCなので一番古い記事)しか出ず他のカスタム投稿タイプが表示されません。

##functions.php

function myaction_archive_sortorder( $wp_query ) { if( is_admin() ){ return $wp_query; } if( $wp_query->is_main_query() && $wp_query->is_archive() ){ $wp_query->set( 'posts_per_page',-1 ); $wp_query->set( 'meta_key', 'first_date' ); $wp_query->set( 'orderby', 'meta_value' ); $wp_query->set( 'order', 'ASC' ); $wp_query->set( 'post_status', array('private','publish') ); } return $wp_query; } add_action( 'pre_get_posts', 'myaction_archive_sortorder' );

##ACFの関連を入れているソース
コメントの間を削除すると、全て複数のカスタム投稿タイプが表示されます。

<?php if(get_post_type()=='biography'): ?> <?php $date = date_create( get_field( 'first_date' ) ); echo date_format( $date, 'Y/m/d' ); ?> <?php the_title(); ?> </h4> <?php elseif(get_post_type()=='schedule'&&get_post_status () == 'private' ): ?> <?php if (is_object_in_term($post->ID, 'schedule_cat','scheduleA')): ?> <h4 class="bold"> <?php the_field('sub_title'); ?><?php the_title(); ?> </h4> <?php if(have_rows('event_a_list')): ?> <?php while(have_rows('event_a_list')): the_row(); ?> <dl class="biographybox01"> <dt> <?php $date = date_create( get_sub_field( 'event_a_date' ) ); echo date_format( $date, 'Y/m/d' ); ?>&nbsp; </dt> <dd> <?php $ctm = get_post_meta($post->ID, 'event_a_concept_title', true);?> <?php if(empty($ctm)):?> <p><?php the_sub_field('event_a_concept_title'); ?></p> <?php else : ?> <?php endif;?> <p><?php if(post_custom('event_a_concept_title')): ?> <?php the_sub_field('event_a_concept_title'); ?> <?php endif;?> <!--ここから削除--> <?php $posts = get_sub_field('event_a_places02'); if( $posts ): ?> <?php foreach( $posts as $post): ?> <?php the_field('livehouse_add_place',$post->ID); ?>・<?php the_title(); ?> <?php endforeach; ?> <?php endif; ?> <!--ここまで削除--> </p> </dd> </dl> <?php endwhile; ?> <?php endif; ?> <?php elseif ( is_object_in_term( $post->ID, 'schedule_cat', array( 'scheduleB', 'scheduleC' ) ) ): ?> <h4 class="eventTitle"> <?php the_title(); ?> </h4> <?php if(have_rows('event_b_list')): ?> <?php while(have_rows('event_b_list')): the_row(); ?> <dl class="biographybox01"> <dt> <?php $date = date_create( get_sub_field( 'event_b_date' ) ); echo date_format( $date, 'Y/m/d' ); ?>&nbsp; </dt> <dd> <?php $ctm = get_post_meta($post->ID, 'event_b_concept_title', true);?> <?php if(empty($ctm)):?> <p><?php the_sub_field('event_b_concept_title'); ?></p> <?php else : ?> <?php endif;?> <p><?php if(post_custom('event_b_concept_title')): ?> <?php the_sub_field('event_b_concept_title'); ?> <?php endif; ?> <!--ここから削除--> <?php $posts = get_sub_field('event_b_places02'); if( $posts ): ?> <?php foreach( $posts as $post): ?> <?php the_field('livehouse_add_place',$post->ID); ?>・<?php the_title(); ?> <?php endforeach; ?> <?php endif; ?> <!--ここまで削除--> </p> </dd> </dl> <?php endwhile; ?> <?php endif; ?> <?php endif; ?> <?php elseif ( get_post_type() == 'other' ): ?> <?php if ( is_object_in_term( $post->ID, 'other_cat', array( 'other01', 'other02', 'other03' ) ) ): ?> <div class="otherBlock00"> <h4 class="bold"> <span class="small"><?php $terms = get_the_terms($post->ID,'other_cat'); foreach( $terms as $term ) { echo $term->name; } ?></span> <?php $date = date_create( get_field( 'first_date' ) ); echo date_format( $date, 'Y/m/d' ); ?>発売 <?php if(post_custom('event_concept_title')): ?> <?php the_sub_field('event_concept_title'); ?> <?php endif; ?> 「 <?php the_title(); ?>」</h4> <dl class="otherBox00"> <dd> <?php if(have_rows('other')): ?> <?php while(have_rows('other')): the_row(); ?> <dl> <dt> <img src="<?php the_sub_field('other_jacket'); ?>"> </dt> <dd><?php the_sub_field('other_type'); ?></dd> </dl> <?php endwhile; ?> <?php endif; ?> </dd> </dl> </div> <?php endif; ?> <?php else :?> <?php endif;?>

##関連を使った目的
イベントページなのでイベント会場を関連で表示したいです。
また、関連の箇所のみ削除すると、他のカスタム投稿タイプも一覧として表示されます。

よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/04/08 14:58

1件しか出ないというのは、何が1件しか出ないのでしょう。
退会済みユーザー

退会済みユーザー

2017/04/09 03:36 編集

アーカイブで、ACFリピーターを使用している部分の最新(今回はASCなので一番古い記事)の1件のみの情報しか出ないです
退会済みユーザー

退会済みユーザー

2017/04/09 10:49

「ACFリピーターで関連を使用しているカスタム投稿タイプ」を投稿タイプAとすると、投稿タイプAのアーカイブを表示する際に、投稿タイプAの記事が1件しか表示されないということですか?
退会済みユーザー

退会済みユーザー

2017/04/09 10:53

それから、「関連の箇所のみ削除すると、他のカスタム投稿タイプも一覧として表示されます」とのことですが、具体的にどの部分を削除したら正常に動いたのか、削除した部分にコメントを入れていただけますか。
退会済みユーザー

退会済みユーザー

2017/04/09 11:24

いつも、コメントしていただきありがとうございます。上の質問はその通りです。下の質問に関してはコメントを入れます。
guest

回答1

0

ベストアンサー

質問文への追記ありがとうございます。

削除したら動いた部分からの推測になりますが、変数$postを使用しているのが悪さしているのではないかと思いました。
コードのどこかでglobal $post;を宣言していないでしょうか。
もし、そうであれば、関連の出力箇所で$post$mypostに置き換えた以下のコードで動かしてみてください。

PHP

1<?php $posts = get_sub_field('event_a_places02'); if( $posts ): ?> 2<?php foreach( $posts as $mypost): ?> 3<?php the_field('livehouse_add_place',$mypost->ID); ?><?php echo get_the_title( $mypost->ID ); ?> 4<?php endforeach; ?> 5<?php endif; ?>

投稿2017/04/10 08:03

編集2017/04/10 13:12
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/04/10 12:46 編集

回答ありがとうございます! <?php echo get_the_title( $mypost->ID )(); ?> の最後の();は必要なのでしょうか。この状態だと、エラーが出てしまいます。 ();の部分を削除した上で、テーマをアップしましたが表示されず・・・ またfunctions.phpの中に global $postを宣言していたので、その箇所を削除して表示されるかどうか試しにやってみたものの、表示されず・・・ SEO関連のプラグインが干渉も疑って外してみたものの表示されず・・・
退会済みユーザー

退会済みユーザー

2017/04/10 13:12

> <?php echo get_the_title( $mypost->ID )(); ?> あ、これは明らかに編集ミスです。質問文のほうを修正しておきます。 global $post;の件は、「ACFの関連を入れているソース」が書かれているPHPファイルの中で宣言されていたら、という意味なので、別ファイルに書かれているのであれば関係ないです。
退会済みユーザー

退会済みユーザー

2017/04/10 13:48

ありがとうございます!早速上記ソースを利用してみたのですが、やはりうまく他のカスタム投稿タイプが表示されないようです。 foreachとwhileが干渉している・・・ということとかも考えていたのですが、手詰まりで・・・
退会済みユーザー

退会済みユーザー

2017/04/10 14:03

その部分を削除したら正常に動作するということなので、その処理に何かがあるとは思うのですが…… 変数$postsを外側のループでも使っているということはないでしょうか?
退会済みユーザー

退会済みユーザー

2017/04/10 14:12

今の内容をヒントに関連のところの$postsを$postsrelationに変更したら解消されました。 テンプレートの中の$postsと干渉していたようです。 ありがとうございました。
退会済みユーザー

退会済みユーザー

2017/04/10 14:17

なるほど。外側のループで使っている$postsを、関連のところの処理で上書きしてしまっていたんですね。 解決したようでよかったです。
退会済みユーザー

退会済みユーザー

2017/04/10 14:23

mizさんの助言がなければ気づきませんでした。 いい勉強になりました ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問