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

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

ただいまの
回答率

90.34%

  • WordPress

    7657questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 594
退会済みユーザー

退会済みユーザー

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

一部カスタム投稿タイプに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;?>

関連を使った目的

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

よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • miz

    2017/04/09 19:53

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

    キャンセル

  • この投稿は削除されました

  • 退会済みユーザー

    退会済みユーザー

    2017/04/09 20:24

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

    キャンセル

回答 1

checkベストアンサー

+2

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/10 21:43 編集

    回答ありがとうございます!
    <?php echo get_the_title( $mypost->ID )(); ?>
    の最後の();は必要なのでしょうか。この状態だと、エラーが出てしまいます。
    ();の部分を削除した上で、テーマをアップしましたが表示されず・・・

    またfunctions.phpの中に
    global $postを宣言していたので、その箇所を削除して表示されるかどうか試しにやってみたものの、表示されず・・・

    SEO関連のプラグインが干渉も疑って外してみたものの表示されず・・・

    キャンセル

  • 2017/04/10 22:12

    > <?php echo get_the_title( $mypost->ID )(); ?>
    あ、これは明らかに編集ミスです。質問文のほうを修正しておきます。

    global $post;の件は、「ACFの関連を入れているソース」が書かれているPHPファイルの中で宣言されていたら、という意味なので、別ファイルに書かれているのであれば関係ないです。

    キャンセル

  • 2017/04/10 22:48

    ありがとうございます!早速上記ソースを利用してみたのですが、やはりうまく他のカスタム投稿タイプが表示されないようです。

    foreachとwhileが干渉している・・・ということとかも考えていたのですが、手詰まりで・・・

    キャンセル

  • 2017/04/10 23:03

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

    キャンセル

  • 2017/04/10 23:12

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

    キャンセル

  • 2017/04/10 23:17

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

    キャンセル

  • 2017/04/10 23:23

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

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

    キャンセル

同じタグがついた質問を見る

  • WordPress

    7657questions

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