サポート » 使い方全般 » 投稿した年の最新記事にのみに表示させたい

  • 解決済 mclcl

    (@mclcl)


    はじめまして。

    「twentyten」のテーマで、AutoPagerを使用しています。
    loop.phpにて
    「同じ年に投稿した記事の中で、最新の記事にのみ<h3>○○○○年</h3>を入れる」
    という指示を出したいのです。

    <?php the_date(‘Y’, ‘<h3>’, ‘</h3>’); ?>

    でやって年を表示させることはできたのですが、
    the_dateだと月・日の情報も取得してしまうためにうまくいきません。

    wordpress初心者なので、大変申し訳ございませんがよろしくおねがいします。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • nobita

    (@nobita)

    こんにちは

    年別アーカイブにタイトルを付けたいという意味ですか?

    トピック投稿者 mclcl

    (@mclcl)

    すみません、説明が足りませんでした。

    index.phpに投稿したエントリー順に掲載されていく(loop.php)と思うんですが、

    通常
    <div>0000年00月00日エントリー内容</div>
    <div>0000年00月00日エントリー内容</div>
    <div>0000年00月00日エントリー内容</div>


    となると思うのですが、
    同じ年に投稿した記事の中で、最新のものに<h3>○○○○年</h3>
    と入れたいんです。

    <div><h3>2012年</h3>2012年4月19日エントリー内容</div>
    <div>2012年3月10日エントリー内容</div>
    <div>2012年2月22日エントリー内容</div>
    <div><h3><2011年</h3>2011年12月29日エントリー内容</div>
    <div>2011年11月12日エントリー内容</div>
    <div>2011年10月18日エントリー内容</div>
    <div>2011年5月5日エントリー内容</div>
    <div>2011年2月6日エントリー内容</div>
    <div><h3><2010年</h3>2010年12月29日エントリー内容</div>


    という感じです。

    宜しくお願い致します。

    nobita

    (@nobita)

    こんにちは

    複数年にわたる、アーカイブを表示するためには、ご自身ですべての記事をリストするコードを書いているんだと思いますが、そういうことですか?

    the_dateだと月・日の情報も取得してしまうためにうまくいきません。

    という部分をもう少し具体的に、教えてください。

    コードも書いていただけるといいと思います。

    追記:twentyeleven等は、?y=2008等で、すべての年を表示するみたいですね。
    loopの外に

    $my_date = '';

    loopの中に

    <?php
    if( $my_date !== get_the_date('Y', '<h3>', '</h3>') ){
        $my_date = get_the_date('Y', '<h3>', '</h3>');
    	echo $my_date;
    }
    ?>

    とかで、(かっこ悪いですが)どうですか?

    トピック投稿者 mclcl

    (@mclcl)

    こんにちは。

    >複数年にわたる、アーカイブを表示するためには、ご自身ですべての記事をリストするコードを書いているんだと思いますが、そういうことですか?

    いえ、基本的には「twentyten」テーマそのままで、
    「AutoPager」というプラグインを使用するだけ、という感じです。

    通常だと、トップページにエントリーされた記事を○件表示、
    ページ下部に「古い投稿へ」でindex.php内を遷移して
    次の○件を表示してくれると思うんですが、
    「AutoPager」を使用するとページをスクロールした際、
    プラグインで指定したid内に次のページを表示してくれます。
    http://lagoscript.org/jquery/autopager

    「その年の最後の記事に<h3>を出力できたらいいなぁ」
    と思い、色々調べたんですが、分からず今回質問させていただきました。

    the_date()ですが、loop.php内に
    <?php the_date(‘Y’, ‘<h3>’, ‘</h3>’); ?>を足しただけです。

    loop.phpから抜粋ですが、

    ———————————————————-

    `<div id=”post-<?php the_ID(); ?>” <?php post_class(); ?>>
    <?php the_date(‘Y’, ‘<h3>’, ‘</h3>’); ?>
    <h2 class=”entry-title”>” title=”<?php printf( esc_attr__( ‘Permalink to %s’, ‘twentyten’ ), the_title_attribute( ‘echo=0’ ) ); ?>” rel=”bookmark”><?php the_title(); ?></h2>
    <div class=”entry-meta”>
    <?php twentyten_posted_on(); ?>
    </div><!– .entry-meta –>

    <?php if ( is_archive() || is_search() ) : // Only display excerpts for archives and search. ?>
    <div class=”entry-summary”>
    <?php the_excerpt(); ?>
    </div><!– .entry-summary –>
    <?php else : ?>
    <div class=”entry-content”>
    <?php the_content( __( ‘Continue reading <span class=”meta-nav”>→</span>’, ‘twentyten’ ) ); ?>
    <?php wp_link_pages( array( ‘before’ => ‘<div class=”page-link”>’ . __( ‘Pages:’, ‘twentyten’ ), ‘after’ => ‘</div>’ ) ); ?>
    </div><!– .entry-content –>
    <?php endif; ?>

    <div class=”entry-utility”>
    <?php if ( count( get_the_category() ) ) : ?>
    <span class=”cat-links”>
    <?php printf( __( ‘<span class=”%1$s”>Posted in</span> %2$s’, ‘twentyten’ ), ‘entry-utility-prep entry-utility-prep-cat-links’, get_the_category_list( ‘, ‘ ) ); ?>
    </span>
    <span class=”meta-sep”>|</span>
    <?php endif; ?>
    <?php
    $tags_list = get_the_tag_list( ”, ‘, ‘ );
    if ( $tags_list ):
    ?>
    <span class=”tag-links”>
    <?php printf( __( ‘<span class=”%1$s”>Tagged</span> %2$s’, ‘twentyten’ ), ‘entry-utility-prep entry-utility-prep-tag-links’, $tags_list ); ?>
    </span>
    <span class=”meta-sep”>|</span>
    <?php endif; ?>
    <span class=”comments-link”><?php comments_popup_link( __( ‘Leave a comment’, ‘twentyten’ ), __( ‘1 Comment’, ‘twentyten’ ), __( ‘% Comments’, ‘twentyten’ ) ); ?></span>
    <?php edit_post_link( __( ‘Edit’, ‘twentyten’ ), ‘<span class=”meta-sep”>|</span> <span class=”edit-link”>’, ‘</span>’ ); ?>
    </div><!– .entry-utility –>
    </div><!– #post-## –>
    ———————————————————-

    これだと

    2012年
    2012年4月19日 本文
    2012年4月19日 本文

    2012年
    2012年3月19日 本文

    2012年
    2012年2月20日 本文

    2011年
    2011年12月29日 本文

    2011年
    2011年10月29日 本文
    2011年10月29日 本文

    2011年
    2011年9月1日 本文


    という感じで出力されてしまいます。

    うまく説明できているか不安です。
    申し訳ございませんが、これでご理解いただけますでしょうか?

    宜しくお願い致します。

    nobita

    (@nobita)

    こんにちは
    余計な手間をおかけしました

    前の回答の、追記の部分を試してみてください

    トピック投稿者 mclcl

    (@mclcl)

    こんにちは。

    「追記」で教えていただいたコードを「twentyeleven」に記述しました。

    年はきちんと表示されました!
    しかし、エントリーすべてに年が出てしまいますね・・・。

    2012年
    2012年4月19日 本文

    2012年
    2012年4月19日 本文

    2011年
    2012年3月19日 本文

    2011年
    2012年2月20日 本文


    「twentyeleven」のcontent.phpに

    <?php $my_date = ''; ?>
    
    <article id="post-<?php the_ID(); ?>" <?php post_class();  the_post(); ?>>
    <?php
    	if( $my_date !== get_the_date('Y', '<h3>', '</h3>') )
    	{ $my_date = get_the_date('Y', '<h3>', '</h3>');
    	echo $my_date;
    	}
    ?>

    書き方に何か問題あるでしょうか・・・・。

    申し訳ございませんが宜しくお願い致します。

    nobita

    (@nobita)

    こんにちは

    <?php
    $my_date = '';//これはループの外側に書いてください
    	/* Start the Loop.
    	 *
    	 * In Twenty Ten we use the same loop in multiple contexts.
    	 * It is broken into three main parts: when we're displaying
    	 * posts that are in the gallery category, when we're displaying
    	 * posts in the asides category, and finally all other posts.
    	 *
    	 * Additionally, we sometimes check for whether we are on an
    	 * archive page, a search page, etc., allowing for small differences
    	 * in the loop on each template without actually duplicating
    	 * the rest of the loop that is shared.
    	 *
    	 * Without further ado, the loop:
    	 */ ?>
    <?php while ( have_posts() ) : the_post(); ?>
    トピック投稿者 mclcl

    (@mclcl)

    こんにちは。

    うまくいきました!ありがとうございます!

    2つほどお伺いしたいのですがよろしいでしょうか?

    ■1つ目
    loopの外側に$my_date = ”;を記述し、loop内に

    <?php
    	if( $my_date !== get_the_date('Y', '<h3>', '</h3>') )
    	{ $my_date = get_the_date('Y', '<h3>', '</h3>');
    	echo $my_date;
    	}
    ?>

    を記述したのですが<h3>タグが出力されない原因は何でしょうか?

    ■2つ目
    表示件数を3つに設定した際、次のページに遷移した際に再び年数が
    出力されてしまうんですが、次ページになった際も表示しない、という設定は不可能でしょうか?

    ■1ページ目
    2012年
    2012年4月6日 本文
    2012年3月6日 本文
    2012年2月6日 本文

    ■2ページ目
    2012年1月6日 本文

    2011年
    2011年12月6日 本文
    2011年11月6日 本文

    ■3ページめ
    2011年10月6日 本文


    といった感じです。

    重ね重ね申し訳ございませんが宜しくお願い致します。

    nobita

    (@nobita)

    こんにちは

    引数間違えました 訂正してください

    <?php
    	if( $my_date !== get_the_date('Y') )
    	{ $my_date = get_the_date('Y');
    	echo '<h3>'. $my_date.'</h3>';
    	}
    ?>

    AutoPager使っていないので、正確にはいえませんが、$_SESSION[‘my_date’]などで、処理できるかもしれないと思います。
    PHPを調べてみてください。

    トピック投稿者 mclcl

    (@mclcl)

    ありがとうございます!

    $_SESSION[‘my_date’]
    は色々調べてします。

    色々調べて、できるorできないが分かりましたらこの記事を解決済みにさせていただきます!

    本当にありがとうございました!

    トピック投稿者 mclcl

    (@mclcl)

    nobitaさんのご指示通り、「$_SESSION[‘my_date’]」で
    うまくいきました!

    ■index.php
    loop.phpを読み込む前に

    <?php
    session_start();
    ?>
    <?php if(is_home() && !is_paged()): ?>
    <?php
    $_SESSION['my_date'] = '';
    ?>
    <?php endif; ?>

    ■loop.php
    loop部分に

    <?php
    if( $_SESSION['my_date'] !== get_the_date('Y') )
    { $_SESSION['my_date'] = get_the_date('Y');
    echo '<h2>'. $_SESSION['my_date'] .'</h2>';
    }
    ?>
11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「投稿した年の最新記事にのみに表示させたい」には新たに返信することはできません。