サポート » 使い方全般 » 記事の取得がうまくできません

  • いつもお世話になっております。

    階層はこのようになっています。

    カスタム投稿タイプは2つ使用しています。
    ・食べ物のページ - カスタム投稿タイプ
    ・野菜のページ - カスタム投稿タイプ

    ┗食べ物の種類  - タクソノミー
     ┗野菜    - 親ターム
      ┗葉っぱ   - 子ターム(single-食べ物のページ.phpで表示)
       ┗キャベツ - 孫ターム(single-食べ物のページ.phpで表示)
        ┗キャベツについての投稿(single-野菜のページ.phpで表示)
       ┗小松菜  - 孫ターム
        ┗小松菜についての投稿(single-野菜のページ.phpで表示)
       ┗レタス  - 孫ターム
        ┗レタスについての投稿(single-野菜のページ.phpで表示)

    そして現在、taxonomy-食べ物.phpで、以下のように記述しています。

    <h2>葉っぱ</h2>
    <?php
    $term = array_shift(get_the_terms($post->ID, '食べ物の種類'));
    ?>
    
     <?php $tax_posts = get_posts('post_type=食べ物のページ&taxonomy=食べ物の種類&order=asc&exclude='.get_the_ID().'&term='.esc_html($term->slug)); if($tax_posts): ?>
    
    <div>
      <?php foreach($tax_posts as $tax_post): ?>
       <?php $hoge = new WP_Query('post_type=野菜のページ&showposts=1&orderby=rand&taxonomy=食べ物の種類&exclude='.get_the_ID().'&term='.esc_html($term->slug));
         while($hoge->have_posts()) : $hoge->the_post();?>
          <li>
            <a href="<?php echo get_permalink($tax_post->ID); ?>"><img src="<?php the_field( 'カスタムフィールド値', $hoge->ID ); ?>" alt="" /></a>
            <p><?php echo esc_html($tax_post->post_title); ?></p>
          </li>
       <?php endwhile;?>
      <?php endforeach; ?>
     <?php endif; ?>
    <div>

    リンクとタイトルは、食べ物のページ(カスタム投稿タイプ)から取得し、
    画像だけ野菜のページ(カスタム投稿タイプ)から取得する、という記述です。

    しかしこのコードの場合、

    <li>キャベツ(小松菜の画像)</li>
    <li>小松菜(レタスの画像)</li>
    <li>レタス(レタスの画像)</li>

    というように、ぐちゃぐちゃで取得されてしまいます。
    キャベツはキャベツの画像の中でランダム1枚表示、小松菜は小松菜の・・・としたいのですがうまくいきません。

    どのような条件をプラスすれば、選別できますでしょうか?
    しばらくの間、これで詰まってしまっています・・・;
    よろしければ、ご教授よろしくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック投稿者 mae-tel

    (@mae-tel)

    現状、未だ解決に至っておりません。
    どなたかヒントだけでもいただけませんでしょうか?

    $tax_posts = get_posts('post_type=食べ物のページ&taxonomy=食べ物の種類&order=asc&exclude='.get_the_ID().'&term='.esc_html($term->slug));

    $term は「葉っぱ」なのですよね。その $term を使って

    $hoge = new WP_Query('post_type=野菜のページ&showposts=1&orderby=rand&taxonomy=食べ物の種類&exclude='.get_the_ID().'&term='.esc_html($term->slug));

    のように投稿をランダム取得しているのが原因でしょう。この WP_Query の引数にキャベツ、小松菜、レタスを切り替えながら指定すれば解決するのではありませんか。

    トピック投稿者 mae-tel

    (@mae-tel)

    gblsmさま
    ご教授ありがとうございます。大変助かります。

    私のコードでは「葉っぱ」という親タームまでしか分類されておらず、「キャベツ」や「小松菜」としてきちんと分類されて取得されずに、「葉っぱ」に属する投稿が全て取得されてしまっているということですよね。

    ご指摘の通り、キャベツや小松菜を取得できれば表示できそうな気がします!!

    WP_Queryの引数にタームを切り替えながら指定する、というのは
    WP_Queryの引数のどれかを使用して、タームを絞り込むということでしょうか?

    array(
            'terms' => array( 'キャベツ', '小松菜' )
    )

    このような引数を追加するということでしょうか
    ターム名を一つ一つ書くのではなく自動的に判別して表示させるという引数は存在しますか?

    $tax_post はキャベツ、小松菜、レタスの3つが順に入ります。なので WP_Query の引数に $term->slug を指定する代わりに、$tax_post に付いているターム(のスラッグ)を指定すればよいですよね。投稿に付いているタームを取得するには関数 get_the_terms が使えます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「記事の取得がうまくできません」には新たに返信することはできません。