<?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回やったら負荷かもしれませんので、
あらかじめ年ごとに取得しておいたらよいのかなぁ…
カレンダーのウィジェットを表示しているコードを調べたら、
もっとよいヒントがありそうですね。
アドバイス、ありがとうございます。
ただプログラムが書けないので「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とか)を設定すればよいと思いますよ。
アドバイス方、ありがとうございます。
やりたい事にだいぶ近づきました。
スマートではありませんが、以下のように変えてみました。
<?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;
で良さそうです。
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 です。
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 )."月";
で!
kzさん、ありがとうございます。
カラ記事の1桁の月に、0が付きました!
とっても嬉しいです(^o^)
本当にありがとうございました。