サポート » 使い方全般 » カスタム投稿タイプの最新3件にNEW!を表示させたい

  • 解決済 amachang

    (@amachang)


    worksというカスタム投稿タイプの取得をし、最新の3件にNEW!を表示させたいと考えています。様々なサイトを参考に、コードを以下のように記述していますが、すべてにNEW!が表示されてしまいます。

    <?php $posts = get_posts('post_type=works&posts_per_page=9&order=desc'); ?>
    <ul>
    <?php foreach ($posts as $post) : setup_postdata($post); ?>
    <li>
    <div>
    <?php
    if ($post->current_post < 3) {
    echo 'NEW!';
    }
    ?>
    </div>
    </li>
    <?php endforeach; wp_reset_postdata(); ?>
    </ul>

    なお、更新日から○日という風にする場合は、以下の記述でうまくいっています。

    <?php $posts = get_posts('post_type=works&posts_per_page=9&order=desc'); ?>
    <ul>
    <?php foreach ($posts as $post) : setup_postdata($post); ?>
    <li>
    <div>
    <?php
    $days = 30;
    $today = date_i18n('U');
    $entry = get_the_time('U');
    $kiji = date('U',($today - $entry)) / 86400 ;
    if( $days > $kiji ){
    echo 'NEW!';
    }
    ?>
    </div>
    </li>
    <?php endforeach; wp_reset_postdata(); ?>
    </ul>

    件数での表示ができればと思いますが、どなたか書き方についてご教示頂けないでしょうか?

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • カウント用の変数を追加すればいいのでは

    <?php $posts = get_posts('post_type=works&posts_per_page=9&order=desc'); ?>
    <?php $post_counter = 0; ?>
    <ul class="recent-posts">
    <?php foreach ($posts as $post) : setup_postdata($post); ?>
    <li>
    <div>
    <?php
    $post_counter++;
    if ( $post_counter <= 3 ) {
    echo 'NEW!';
    }
    ?>
    </div>
    </li>
    <?php endforeach; wp_reset_postdata(); ?>
    </ul>

    NEW! だけ CSS で追加するのもいいかもしれません。

    ul.recent-posts li:nth-child(-n+3):before {
    	content: "NEW!";
    }

    こんにちは、

    WordPressの一般的な機能に沿って書くのも一つの方法です。

    カスタム投稿は、考慮していませんが、例えば、

    template

    
    <ul class="custom-list">
    <?php
    	$posts = get_posts( 'post_type=post&posts_per_page=9&order=desc' );
    	
    	foreach ( $posts as $key => $post ) {
    		setup_postdata($post);
    		$attribute_before = $key < 3  ? 'new' : '';
    ?>
    	<li>
    		<article id="post-<?php the_ID(); ?>" <?php post_class( $attribute_before ); ?>>
    		<?php the_title('<h3 class="entry-title">','</h3>');?>
    		</article>
    	</li>
    <?php
    	}
    	wp_reset_postdata();
    ?>
    </ul>
    

    style.css

    
    .custom-list .new .entry-title:before{
        content:'new';
        color:red;
        margin-right:.5em;
    }
    

    要点は、get_post()で得られる値は、配列の中にobjectが配置されているので、foreachなら

    foreach( $array as $val)でなくforeach( $array as $key=>$val)で、何番目の投稿かが判定できます。

    後は、投稿にnewクラスを追加して、対応するスタイルを記述すれば、カスタム投稿でもnewを追加してやることは

    可能ではないかと思います。

    もちろん、CSSやるアイディアが、簡単で最高!

    • この返信は2 年、 8 ヶ月前に  nobita さんが編集しました。
    • この返信は2 年、 8 ヶ月前に  nobita さんが編集しました。

    @ishitaka

    ありがとうございます!
    そちらの方法で解決しました!

    @nobita

    ありがとうございます!
    たいへん勉強になります。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「カスタム投稿タイプの最新3件にNEW!を表示させたい」には新たに返信することはできません。