サポート » 使い方全般 » 投稿一覧の和暦表記について教えてください。

  • いつもお世話になります。
    表題にも記しました投稿一覧の和暦表記 について困っており投稿させていただきました。

    現在、特定カテゴリーの投稿一覧に下記の様に年毎の表記をいれたい
    ■2013年■
    ・2013年 投稿2
    ・2013年 投稿1
    ■2012年■
    ・2012年 投稿2
    ・2012年 投稿1
    と考えており、それは

    <?php
    $posts = get_posts('numberposts=0&category=6');
    foreach($posts as $post) :
    setup_postdata($post);
    ?>
    <?php the_date( ■ Y, '<li>', '年 ■</li>' . "\n" ); ?>
    <span><?php the_time('20y年m月d日'); ?> : </span>
    <p><a>" title="<?php the_title(); ?>">
    <?php the_title(); ?></a></p>
    <?php endforeach; ?>

    で実現できたのですが、
    さらに、できれば
    ■2013年(平成25年)■
    ・2013年 投稿2
    ・2013年 投稿1
    ■2012年(平成24年)■
    ・2012年 投稿2
    ・2012年 投稿1
    のように、西暦の横に和暦を並記したいと考えているのですが、なかなかうまくいかず
    こちらにご相談させていただきました。

    上手く説明できず恐縮ですが、ぜひともご教授いただければと思います。
    よろしくお願いします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • モデレーター gatespace

    (@gatespace)

    <?php $wareki = the_date('Ymd', '', '', false); ?> とかにして $wareki を和暦に変換すればいいのでは?

    トピック投稿者 vac2012

    (@vac2012)

    gatespace世話役さま
    早速の投稿をありがとうございました!

    すみません、当方、PHP・JavaScript初心者でして、和暦への変換がよくわからない状態なのですが
    http://www.sandalot.com/javascriptで西暦を和暦に変換する関数/のようなコードをfunction.phpに追記すればいいのでしょうか。

    モデレーター gatespace

    (@gatespace)

    西暦を和暦に変換するには何らかの関数などを使わないといけません。
    テーマのファイルに書くなら JavaScript ではなくでPHPでやった方が良いかと。
    PHP 和暦変換 で参考になるようなソースはたくさん出てきます。

    テンプレートファイル側で複数箇所で呼び出す可能性があるなら、
    テーマの functions.php に関数を作っておけば使い回しが聞くでしょう。

    以前自分か作った適当な物ですが、
    テーマのfunctions.phpに

    function jp_wareki( $datenum ) {
    	$y = substr( $datenum, 0, 4 );
    	$m = substr( $datenum, 4, 2 );
    	$d = substr( $datenum, 6, 2 );
    
    	if ( checkdate($m, $d, $y) ) {
    		if ( $datenum >= 19890108 ) {
    			$wname = "H";
    			$y -= 1988;
    		} elseif ( $datenum >= 19261225 ) {
    			$wname = "S";
    			$y -= 1925;
    		} elseif ( $datenum >= 19120730 ) {
    			$wname = "T";
    			$y -= 1911;
    		} elseif ( $datenum >= 18680125 ) {
    			$wname = "M";
    			$y -= 1867;
    		}
    		$datenum = $wname.(string)$y;
    	} else {
    		$datenum = "日付が正しくありません。";
    	}
    
    	return $datenum;
    }

    を書いておいて、テンプレートファイルの使いたいところ以下の様に書きます

    <?php
    $wareki = the_date('Ymd', '', '', false); //the_dateの戻り値を使う
    echo jp_wareki($wareki); // 2013年3月19日 なら H25
    ?>

    トピック投稿者 vac2012

    (@vac2012)

    gatespace世話役さま
    いつもありがとうございます。

    丁寧な解説、感謝します!
    早速、教えていただいたコードをfunctions.phpを追記し、

    <?php the_date( ■ Y, '<li>', '年 ■</li>' . "\n" ); ?>
    の替りに

    <?php
    $wareki = the_date('Ymd', '', '', false); //the_dateの戻り値を使う
    echo jp_wareki($wareki); // 2013年3月19日 なら H25
    ?>

    を書いた所、和暦表記はできたのですが、
    H25
    ・2013年 投稿2
    日付が正しくありません。
    ・2013年 投稿1
    という形の表記になりました・・・。
    <?php the_date( ■ Y, '<li>', '年 ■</li>' . "\n" ); ?>
    は、
    http://www.imaginationdesign.jp/blog/wordpress/1297/を参照させていただいたのですが、
    この、リストの上に年数を出す原理が、いまいちわかっておらず、

    <?php the_date( ■ Y, '<li>', '年 ■</li>' . "\n" ); ?>
    <?php  echo '平成'. (get_the_date('Y')-1988) .'年'; ?>

    などを試したみたのですが、
    ■ 2013年 ■
    平成25年
    ・2013年 投稿2
    平成25年
    ・2013年 投稿1
    という感じの表示になり、なかな打開策がみつからない状態です・・・。
    もしなにかよい案があれば教えていただけると助かります。
    なにからなにまですみません・・・。

    モデレーター gatespace

    (@gatespace)

    $wareki を jp_wareki関数に渡して、そこで正しい日付かどうかチェックしています。
    正しい日付でない場合、「日付が正しくありません。」が表示されます。

    ということは $wareki の値が正しくない、という事です。
    試しに

    <?php
    $wareki = the_date('Ymd', '', '', false); //the_dateの戻り値を使う
    var_dump( $wareki );
    ?>

    としてみてください。

    あと the_date は
    the_date( ■ Y, '<li>', '年 ■</li>' . "\n" );
    ではなく
    the_date( 'Y', '<li>■', '年■</li>' . "\n" );
    と書いた方が良いかもしれません。

    the_date
    リファレンスを読んで欲しいのですが、
    the_date は 同じ日に複数の記事がある場合は、最初の記事とともに一度だけ出力されるので、
    年が同じでも月日が違えば複数回出力されます。

    ブログ記事なども参考になりますが、応用が利かない場合もありますので、
    PHPのリファレンスやWordPressのCodexもあわせて読んだ方がいいですよ。

    トピック投稿者 vac2012

    (@vac2012)

    gatespace世話役さま
    いろいろありがとうございます!

    すみません。勉強不足で、やはり、テスト投稿記事が同日だった為、
    ■2013年 ■
    ・2013年 投稿2
    ・2013年 投稿1
    が実現できていたのですが、投稿日を変更した所、
    2013年 ■
    ・2013年 投稿2
    2013年 ■
    ・2013年 投稿1
    となってしましました。

    もう一度、調べ直した所、

    <ul>
    <?php query_posts('cat=6', array('posts_per_page'=>-1,'order'=>'DESC','orderby'=>'date') );
    if ( have_posts() ) :
        $postyear = false; // 比較用の変数を初期化
        while ( have_posts() ) :
            the_post();
            if( $postyear != get_post_time('Y') ) : // 投稿年月を比較
                if ( $postyear !== false ) : // 最初のループは除外。2回目以降で投稿年月が異なれば閉じタグを出力
    ?>
            </ul>
        </li>
    <?php
                endif;
    ?>
        <li><span><?php echo get_post_time('■ Y年'); ?>
    (<?php
    $wareki = the_date('Ymd', '', '', false); //the_dateの戻り値を使う
    echo jp_wareki($wareki); // 2013年3月19日 なら 平成25
    ?>年) ■</span></li>
            <ul>
    <?php
            endif;
    ?>
                <li><span class="kouen_days"><?php the_time('20y年m月d日'); ?> : </span>
    <p><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>">
    <?php the_title(); ?></a></p></li>
    <?php
            $postyear = get_post_time('Y'); // 比較用の変数に年月を代入
        endwhile;
    endif;
    wp_reset_query();
    ?>
            </ul>

    で実現する事ができました!

    <?php
    $wareki = the_date('Ymd', '', '', false); //the_dateの戻り値を使う
    var_dump( $wareki );
    ?>

    に変更した所、「NULL」になってしまったので、echoにもどした所、上手くいきました!

    またいろいろ勉強していきたいと思います!
    ありがとうございました。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「投稿一覧の和暦表記について教えてください。」には新たに返信することはできません。