サポート » 使い方全般 » カテゴリー内の記事の有無で画像を表示・非表示させたい

  • 度々失礼します。

    以前、page.php内に「新着情報の呼び出しでカスタムフィールドが消える」として
    質問したものですが、無事解決して、運用できております。
    http://ja.forums.wordpress.org/topic/6823?replies=3

    今回も上記の内容に関連する難問?に当たったので質問させてください。

    page.phpに以下のような新着情報を呼び出すようにしているのですが、

    <dl>
    <?php
    global $post;
    $tmp_post = $post;
    $myposts = get_posts(‘numberposts=7&category=6’);
    foreach($myposts as $post) :
    setup_postdata($post);
    ?>
    <dt><?php echo date(“Y/m/d”, strtotime($post->post_date)); ?></dt>
    <dd>”><?php the_title(); ?></dd>
    <?php endforeach; ?>
    <?php $post = $tmp_post; ?>
    </dl>

    このcategory=6で設定しているカテゴリーに記事がある場合は
    この<dl>~</dl>を丸ごと表示させるようにし、
    category=6に記事がない場合は<dl>~</dl>を丸ごと表示させない、というようにしたいのです。

    いろんなサイトを調べてみたのですがこのような内容の一例はあまりなく、
    見よう見まねでget the categoryを改造してみたのですがどうもうまくいきません。
    (カスタムフィールドだと簡単にできるのですが、
    ある特定のカテゴリーのチェック、という命令がどうも失敗しているようです)

    もし、どなたかアドバイスを頂けたらありがたいです。
    お手数をおかけいたしますがよろしくお願いいたします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • <?php
    	global $post;
    	$tmp_post = $post;
    	$myposts = get_posts( 'numberposts=7&category=6' );
    	if( !empty( $myposts ) ) :
    
    		foreach($myposts as $post) :
    			setup_postdata($post);
    ?>
    
    <dl>
    	<dt><?php echo date("Y/m/d", strtotime($post->post_date)); ?></dt>
    	<dd>"><?php the_title(); ?></dd>
    </dl>
    
    <?php
    		endforeach;
    	endif;
    	$post = $tmp_post;
    ?>
    

    こうかな…(未検証)

    トピック投稿者 takaraism

    (@takaraism)

    アドバイスありがとうございました。
    途中で仕様が変わり、アドバイスを元に強引に解決致しました(笑

    そこでアドバイスを頂きたいのですが、

    この<dl>~</dl>を丸ごと表示させるようにし、
    category=6に記事がない場合は<dl>~</dl>を丸ごと表示させない
    ・・・という仕様だった物ですが、新たに

    <div class=”wrapper”>

      <?php
      global $post;
      $tmp_post = $post;
      $myposts = get_posts(‘numberposts=7&category=6’);
      foreach($myposts as $post) :
      setup_postdata($post);
      ?>
      <dt><?php echo date(“Y/m/d”, strtotime($post->post_date)); ?></dt>
      <dd>”><?php the_title(); ?></dd>
      <?php endforeach; ?>
      <?php $post = $tmp_post; ?>
      </dl>
      </div>

      上記のようなソースで、記事がない場合はこの<div class=”wrapper”>~</div>を丸ごと消す、という形になりました。
      アドバイスを頂いた内容ではき出すと、
      記事がない場合は確かに消えたのですが、
      記事が2件以上になった場合、<dl>~</dl>部分が二個はき出されてしまいデザインが崩れてしまうようになりました。

      思案した結果、

      <div class=”wrapper”>

      の部分を

      <?php
      global $post;
      $tmp_post = $post;
      $myposts = get_posts(‘numberposts=1&category=6’);
      foreach($myposts as $post) :
      setup_postdata($post);
      ?>
      <div class=”wrapper”>

      <?php endforeach; ?>
      <?php $post = $tmp_post; ?>

      と強引にくくり上げ、
      最後の閉じタグである</div>も同じように記述。
      1つのソースを3ブロックに分けてそれぞれ記事の有無をチェックさせて出し入れさせる・・・というかなり強引な形で表示させることが出来ました。

      ただ、あまりにも強引すぎるので、もっとスマートなやり方はないかなと思っています。
      後学のためにも、改めてアドバイスを頂けたら嬉しいです。
      お手数をおかけ致しますがよろしくお願い致します。

    <?php
    	global $post;
    	$tmp_post = $post;
    	$myposts = get_posts( 'numberposts=7&category=6' );
    	if( !empty( $myposts ) ) :
    ?>
    
    	<div class="wrapper">
    
    <?php
    		foreach($myposts as $post) :
    			setup_postdata($post);
    ?>
    
    	<dt><?php echo date("Y/m/d", strtotime($post->post_date)); ?></dt>
    	<dd>"><?php the_title(); ?></dd>
    
    <?php		endforeach; ?>
    
    	</div>
    
    <?php
    	endif;
    	$post = $tmp_post;
    ?>
    
3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「カテゴリー内の記事の有無で画像を表示・非表示させたい」には新たに返信することはできません。