サポート » 使い方全般 » 月別アーカイブをコンパクトにまとめたい

  • 解決済 sato_17

    (@sato_17)


    お世話になります。

    <ul><?php wp_get_archives('type=monthly&post_type=hoge'); ?></ul>
    を利用した際に表示を

    2013年1月
    2013年2月
    2013年3月
    2012年1月
    2012年2月
    2012年3月
    ではなく
    2013
    1 2 3
    2012
    1 2 3

    のようにしたいと思っています。プラグインの「Compact Archives」を利用出来たらと思ったのですが、カスタム投稿では利用出来ないようでした。カスタマイズをすればカスタム投稿でも使えるとは見かけたのですが調べてみても具体的なコードなどは乗っておらず。

    調べてるうちに月別アーカイブ表示に年区切りを入れるという記事を見つけ以下のコードで近い形には表示させることが出来ました。

    <?php
    $archives_year = strip_tags(wp_get_archives('type=yearly&show_count=0&format=custom&echo=0'));
    $archives_year_array = split("\n",$archives_year);
    array_pop($archives_year_array);
    
    $archives = wp_get_archives('type=monthly&post_type=replay&use_desc_for_title=0&order=ASC&echo=0');
    $archives_array = split("\n",$archives);
    foreach ($archives_year_array as $year_value){
         echo "<h4>".ltrim($year_value)."</h4>\n";
         echo "<ul>\n";
         foreach ( $archives_array as $archives_value) {
              if ( intval(strip_tags($archives_value)) == intval($year_value) ) {
                   echo  str_replace(intval($year_value)."年","",ltrim($archives_value))."\n";
                   array_shift($archives_array);
              }
         }
         echo "</ul>\n";
    }
    ?>

    出力結果

    2013
    1月
    2月
    3月

    出来ればですが以下のようにしたいです。

    ①投稿されていない記事の月も取得したい
    →現状では投稿された月しか表示されません

    ②「月」を消したい
    →可能であれば月を消したいです

    ③function.phpでまとめたい
    カスタム投稿はいくつかあるのですが、これだとコードが長いので
    <ul><?php wp_get_archives('type=monthly&post_type=hoge'); ?></ul>
    と記述して出力出来ればと思います。コードが短くなるのであれば他のやり方でも構いません。

    ■カテ違いは承知ですが、もし先ほど述べたプラグイン(Compact Archives)をカスタム投稿でも利用出来るようになれるのであればそちらでも構いません。

    質問が多く申し訳ないですが、どれか一つでもご教授頂けたら幸いです。宜しくお願いします。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • 短いプラグインなのでざっと見た感じだと
    post_type=’post’
    のところを全部希望のカスタム投稿タイプに変更すれば多分希望の動作になるんじゃないでしょうか?

    *未検証な上にデータベースを操作しているので自己責任かつテストサイトで検証してください。

    トピック投稿者 sato_17

    (@sato_17)

    >gogoweb様
    テストサイトでやってみたところ、エラーは出ることがなかったのですが「Archive is empty」と表示されました。やり方が根本的に間違ってるのかもしれません。PHPはあまり詳しくないもので…具体的にどう記述すればいいのでしょうか?

    post_type=’post,hoge’

    post_type=’post’,’hoge’

    この2つは試してみました。また特定のポストを指定する時は

    <ul> <?php compact_archive('post_type=hoge'); ?> </ul>

    のような感じになるのでしょうか。引き続きプラグインも含め何か分かる方はお教えくださると幸いです。

    post_type=’post’
    のpostを消して代わりにカスタム投稿タイプを入れてください
    例)
    post_type=’hoge’
    こうすると投稿(post)の代わりにカスタム投稿を条件にできるはずです。

    トピック投稿者 sato_17

    (@sato_17)

    >gogoweb様
    おっしゃるとおりに入れ変えてみましたが、月は表示されたもののURLは

    <a href="http://hoge.jp/date/2013/01/">J</a>

    カスタム投稿でなく通常の投稿を取得してるようで変わりありませんでした。カスタマイズは難しいのでしょうか。

    別の方法を模索して無理なようであれば諦めますが、引き続き回答をお待ちしております。もしないようであればいずれトピックは閉じさせてもらいます。gogoweb様ありがとうございましたm(_ _)m

    月別リンクに ?post_type=****** を追加すれば良いのでは?

    下の方

    if ($month_has_posts) {
      $post_type = '******';
      $result .= '<a href="'.get_month_link($year, $month).'?post_type='.$post_type.'" title="'.$month_name.' '.$year.'">'.$month_abbrev.'</a>';
    } else {
      :
    }

    トピック投稿者 sato_17

    (@sato_17)

    >pluto1234様
    希望通りに表示されるようになりましたが、複数指定かつ表示したい所に特定の投稿を指定するは可能なんでしょうか?

    事前に説明するべきだったと反省しておりますが、通常のサイトのようにいくつかのコンテンツに分かれています。Blogというカスタム投稿だったり通所の投稿も使っています。そのページに訪れた際にはそのページのアーカイブを表示させたいと思っています。

    難しいようであればこのプラグインを使うのは諦めようと思います。注文が多く申し訳ないです。

    投稿タイプ(post_type)を引数で渡すように修正(引数を追加)すればできます。

    トピック投稿者 sato_17

    (@sato_17)

    引数を渡すというのがいまいち分かってなかったのですが、調べてなんとか出来るようになりました!gogoweb様、pluto1234様ありがとうございましたm(_ _)m

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「月別アーカイブをコンパクトにまとめたい」には新たに返信することはできません。