サポート » 使い方全般 » 1年分(過去も未来も)の月刊アーカイブを表示しておく。

  • 解決済 suekiki

    (@suekiki)


    投稿あるなしに関係なく、1年分(過去も未来も)の月刊アーカイブを表示しておきたく、
    wp_get_archivesタグで試行錯誤してますが思うように出来ません>< 質問させてください。

    完成イメージ—————————————–
    【アーカイブ】
    ■2012年12月 ■2012年11月 ■2012年10月
    ■2012年09月 ■2012年08月 ■2012年07月
    2012年06月 ■2012年05月 ■2012年04月
    ■2012年03月 ■2012年02月 ■2012年01月
    —————————————————–
    ※個別ページでblog.phpを作り、ブログのトップ(一覧)ページにしてます。
    そのヘッダ部分に上記の月刊アーカイブ(1年分)を表示してます。

    やりたい事は、先に述べたことに加え、
    投稿記事のない月は「リンクなしの文字列」で表示。

    ブログのスタートが6月なので、2012年8月現在は、
    1~5月、9~12月の記事はありません。今後投稿のある9月以降は、
    投稿する度に「自動で文字列(例:2012年9月)にリンクを張りたい」です。

    どうぞ、解決策をご教授ください。
    よろしくお願いします。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック投稿者 suekiki

    (@suekiki)

    <?php
     $out = wp_get_archives('type=monthly&format=custom&after=<br>&echo=0');
     $out = str_replace('年', '年',$out);
     $out = str_replace('月', '月',$out);
     echo $out;
    ?>

    現在上記のコードで、以下のように表示してます。
    2012年08月
    2012年07月
    2012年06月

    投稿記事のある3か月分です。
    投稿記事のない月(1~12月の1年分)も文字列として表示しておきたいのですが、
    コーディングがわかりません。

    どうぞ、お力をおかしください。

    wp_get_archivesだと存在する投稿しか取得できませんので、
    まず、for文で1~12までまわし、月の文字列すべてを表示したらよいと思います。
    さらにfor文の中で、月の投稿が存在するかどうか?を確認して
    もし投稿がある月ならば、月ごとアーカイブへのアンカーを追加するというようにします。

    例えば2012年8月の投稿が存在するかどうか?は、
    query_posts(‘&year=2012&monthnum=8&showposts=1’);

    でもこれを12回やったら負荷かもしれませんので、
    あらかじめ年ごとに取得しておいたらよいのかなぁ…

    カレンダーのウィジェットを表示しているコードを調べたら、
    もっとよいヒントがありそうですね。

    トピック投稿者 suekiki

    (@suekiki)

    アドバイス、ありがとうございます。
    ただプログラムが書けないので「for文で1~12までまわし」等を加えると
    警告&エラーメッセージの連続で><

    やりたい事に近いコードを探してみました↓

    <?php
    $archives_year = strip_tags(wp_get_archives("type=yearly&echo=0"));
    $archives_year_array = split("\n", $archives_year);
    array_pop($archives_year_array);
    
    $archives = wp_get_archives("type=monthly&format=&echo=0");
    $archives_array = split("\n", $archives);
    
    foreach($archives_year_array as $year_value){
      echo "<dt>".ltrim($year_value)."</dt>";
    
      $month_array = array();
    
      for($i=0; $i<12; $i++){
        $month_array[$i] = ($i+1)."月";
      }
    
      foreach($archives_array as $archives_value){
        if(intval(strip_tags($archives_value))==intval($year_value)){
          $month = str_replace(intval($year_value)."年","",ltrim($archives_value));//★
          $month_value = strip_tags(str_replace("月","",$month))-1;
    
          $month_array[$month_value] = $month;
        }
      }
    
      for($i=0; $i<12; $i++){
        echo "<dd>$month_array[$i]</dd>";
      }
    }
    ?>

    上記コードをもとにカスタマイズしたい箇所は、
    ★の部分で年表示(2012年)を削除してあるようですが、ここを削除したくありません。
    また全体が年ごとに追加するループになっているのでこれを1年分にしたいです。

    再度、ご教授のほどよろしくお願いします。

    こんにちわ、
    このようなやりかたがあるのですね。

    もし年のループをやめたいなら、
    foreach($archives_year_array as $year_value){
    というループを削除して、$year_valueに表示したい年(2012とか)を設定すればよいと思いますよ。

    トピック投稿者 suekiki

    (@suekiki)

    アドバイス方、ありがとうございます。
    やりたい事にだいぶ近づきました。
    スマートではありませんが、以下のように変えてみました。

    <?php
    $archives = wp_get_archives("type=monthly&format=custom&echo=0");
    $archives_array = split("\n", $archives);
      $month_array = array();
      for($i=0; $i<12; $i++){
        $month_array[$i] = ($i+1)."月";
      }
    
      $year_value = "2012";
    
      foreach($archives_array as $archives_value){
        if(intval(strip_tags($archives_value))==intval($year_value)){
          $month = str_replace($year_value."年","",$archives_value); //★
          $month_value = strip_tags(str_replace("月","",$month))-1;
    
          $month_array[$month_value] = $month;
        }
      }
    
      for($i=0; $i<12; $i++){
      	echo "$month_array[$i] ";
      }
    ?>

    現在上記コードで、表示は↓のようになってます。
    1月 2月 3月 4月 5月 06月 07月 08月 9月 10月 11月 12月

    表示のように、2012年が表示がされません。
    ★部分の文字を削除する「ltrim()」を省いてみましたが、年の表示はダメのようです。
    何度もすみませんが、アドバイス方よろしくお願いします。

    $month_array[$month_value] = $month;

    $month_array[$month_value] = $archives_value;
    で良さそうです。

    トピック投稿者 suekiki

    (@suekiki)

    kzさん、ありがとうございます。
    年が表示されました(^^)↓のようになってます。
    1月 2月 3月 4月 5月 2012年06月 2012年07月 2012年08月 9月 10月 11月 12月

    できれば、記事のない月も
    文字列として(2012)年を表示しておきたいのですが
    可能でしょうか?

    アドバイスいただければ幸いです。

    for($i=0; $i<12; $i++){
        $month_array[$i] = ($i+1)."月";
      }
    
      $year_value = "2012";

    $year_value = "2012";
      for($i=0; $i<12; $i++){
        $month_array[$i] = $year_value ."年" . ($i+1)."月";
      }

    で OK です。

    トピック投稿者 suekiki

    (@suekiki)

    kzさん、ありがとうございます。
    お陰でやりたい事が実現しました!

    記事のない月にも年が無事表示されてます↓
    —————————————
    2012年1月 2012年2月 2012年3月 2012年4月 2012年5月 2012年06月 2012年07月 2012年08月 2012年9月 2012年10月 2012年11月 2012年12月
    —————————————
    投稿記事(リンク)のない1桁の月に、0が付かないのが気になりますすが…、こちらはまた検索してみます。

    sysbirdさん、kzさん、貴重なお時間をありがとうございました(^^)

    投稿記事(リンク)のない1桁の月に、0が付かない

    $month_array[$i] = $year_value ."年" . zeroise( $i+1, 2 )."月";

    で!

    トピック投稿者 suekiki

    (@suekiki)

    kzさん、ありがとうございます。
    カラ記事の1桁の月に、0が付きました!

    とっても嬉しいです(^o^)
    本当にありがとうございました。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「1年分(過去も未来も)の月刊アーカイブを表示しておく。」には新たに返信することはできません。