サポート » 使い方全般 » indexページに特定の条件に当てはまる記事1件のみ掲載したい

  • indexページに以下の条件に当てはまる記事を掲載したいのですが、上手くいかないのでどなたかご教授いただけるとありがたいです。

    ・普段はカテゴリーIDが3かつ最新の記事を1件のみ表示
    ・先頭に固定表示にチェックを入れた場合、それがカテゴリーIDが3以外の記事でも優先的に表示(1件のみ)
    ・上記に当てはまる記事がない場合はヘッダーに入れ替え

    わかりにくいかもしれませんが、よろしくお願いします。

    下記の状態だと、最新の記事のカテゴリーIDが3以外の場合にヘッダー表示になります。
    $myquery_pickupにcat=>3を足してみましたが、先頭固定表示を入れた記事がカテゴリーID3以外だった場合に無視されてカテゴリーID3の最新記事になります。

    <?php
    $myquery_pickup = array(
    'posts_per_page' => 1,
    'ignore_sticky_posts' => 1,
    'post__in' => get_option('sticky_posts')
    ); ?>
    <?php query_posts($myquery_pickup); ?>
    <?php if(have_posts()): while(have_posts()):the_post(); ?>
    <?php if(is_sticky()): ?>
    <?php if(has_post_thumbnail()) {the_post_thumnail();}else{echo '<img src="',get_template_directory_uri(),'/img/default.png" width="100%" height="100%">';} ?>
    <h2><?php the_title(); ?></h2>
    <p><?php the_content(); ?></p>
    <?php elseif(in_category(3)): ?>
    <?php if(has_post_thumbnail()) {the_post_thumnail();}else{echo '<img src="',get_template_directory_uri(),'/img/default.png" width="100%" height="100%">';} ?>
    <h2><?php the_title(); ?></h2>
    <p><?php the_content(); ?></p>
    </div>
    <?php else: ?>
    <img src="<?php header_image(); ?>" height="100%" width="100%"/>
    <?php endif; ?>
    <?php endwhile; endif; ;?>
3件の返信を表示中 - 1 - 3件目 (全3件中)
  • <?php
    $my_flg = false;
    $my_stickys = get_option( 'sticky_posts' );
    if(!empty($my_stickys)) {
      //先頭固定表示の記事が存在する場合
      $my_flg = true;
      $my_pickup = get_posts( array('showposts' => 1, 'post__in' => get_option('sticky_posts'), 'order' => 'DESC'));
    }else{
    //最新の1件を取得し、カテゴリーIDが3か否か
      $my_pickup = get_posts( array('showposts' => 1, 'order' => 'DESC'));
      $my_categorys = get_the_category($my_pickup);
      foreach($my_categorys as $cat) {
        if (3 == $cat->cat_ID){ $my_flg = true; break(1); }
      }
    }
    // 表示
    if($my_flg){
      global $post;
      $post = $my_pickup[0];
      setup_postdata($post);
      the_title();
    }else{ ?>
      <img src="<?php header_image(); ?>" height="100%" width="100%"/>
    <?php } ?>

    もっとスマートに書ける気がするのですが、思いつかないので、とりあえずこんなコードでどんな感じでしょうか?

    トピック投稿者 takuya1108

    (@takuya1108)

    ue様>

    記述いただいたソースでは最新のカテゴリID-3の記事は上手く出力できませんでした。
    ですが、以下のように2回目(先頭固定がない場合)のget_postに「’category’ => 3」を追加して希望通りの表示にできました。

    <?php
    $my_flg = false;
    $my_stickys = get_option( 'sticky_posts' );
    if(!empty($my_stickys)) {
      //先頭固定表示の記事が存在する場合
      $my_flg = true;
      $my_pickup = get_posts( array('showposts' => 1, 'post__in' => get_option('sticky_posts')));
    }else{
    //最新の1件を取得し、カテゴリーIDが3か否か
      $my_pickup = get_posts( array('showposts' => 1, 'category' => 3));
      $my_categorys = get_the_category($my_pickup);
      foreach($my_categorys as $cat) {
        if (3 == $cat->cat_ID){ $my_flg = true; break(1); }
      }
    }
    // 表示
    if($my_flg){
      global $post;
      $post = $my_pickup[0];
      setup_postdata($post);
      the_title();
    }else{ ?>
      <img src="<?php header_image(); ?>" height="100%" width="100%"/>
    <?php } ?>

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

    トピック投稿者 takuya1108

    (@takuya1108)

    上記で問題が発生しましたので別トピックを立てさせていただきました。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「indexページに特定の条件に当てはまる記事1件のみ掲載したい」には新たに返信することはできません。