Hatena::ブログ(Diary)

WordPressのメモ

04.26.2013

カスタム投稿タイプで月間アーカイブを表示する

なんでうまくできないんだよ!
...で原因究明にトータル10時間ぐらい使っちゃったかも。
しかも単純ミスが原因という。

参考サイト
http://kshock.com/reference/?eid=57

・archive-[ポストタイプ名].php
・date.php
で読み込むことが可能です。

まず参考サイトにある通り、function.phpに以下を追加。


global $my_archives_post_type;

function my_getarchives_where( $where, $r ) {
global $my_archives_post_type;

$my_archives_post_type = '';
if ( isset($r['post_type']) ) {
$my_archives_post_type = $r['post_type'];
$where = str_replace( '\'post\'', '\'' . $r['post_type'] . '\'', $where );
}
return $where;
}

function my_get_archives_link( $link_html ) {
global $my_archives_post_type;

if ($my_archives_post_type != '') {
$add_link .= '?post_type=' . $my_archives_post_type;
$link_html = preg_replace("/href=\'(.+)\'\s/","href='$1".$add_link."'",$link_html);
}
return $link_html;
}


上記は特に書き換える必要はありません。


次に月間アーカイブリストを表示しているテンプレートに以下を追加します。
私の場合はsidebar.phpにいれました。



add_filter( 'getarchives_where', 'my_getarchives_where', 10, 2 );
add_filter( 'get_archives_link', 'my_get_archives_link', 10, 2 );
wp_get_archives('type=monthly&post_type=ポストタイプ名');
remove_filter( 'getarchives_where', 'my_getarchives_where');
remove_filter( 'get_archives_link', 'my_get_archives_link' );




「これでOK!」と書かれていますが、私はできませんでした。
いくつかのサイトも試したのですが...

この時点で確認できたのは、
URLはそのポストタイプの各月毎のアーカイブページ
・表示されている内容は月間アーカイブ関係無しの全件表示。


原因


query_posts("post_type=ポストタイプ名&posts_per_page=表示件数&paged=".$paged);


こいつです。
こいつが書かれていたから、各月ごとに読み込んでくれなかった模様。

偶然、archive.phpはこれがなく

if(have_posts()): while(have_posts()): the_post();

すぐにリピートしろと指示してたので、実験して原因に気付くことができました。

なんかもうこれだけなのに...疲れた。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/lubystar/20130426/1366950028
リンク元