質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.11%

カスタム投稿で月別アーカイブページ作りたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,354

MakotoHoshi

score 46

カスタム投稿で月別アーカイブページを作りたいです。
現在、サイドバーにこのようなコードでアーカイブへのリンクを表示しています。

<ul class="monthly_archive">
        <?php
        $month_args=array(
            'type' => 'monthly',
            'limit' => 12,
            'format' => 'html',
            'post_type' => 'news'
            );
        wp_get_archives($month_args); ?>
    </ul>

このリンクを押した時に、月毎のアーカイブページにリンクしたいです。
wp_queryにmonthnumなどのパラメータを入れたりしましたが、解決できませんでした。
date.phpは以下のようになっています。
よろしくお願いいたします。

<ul id="blog_list" class="cl">
                    <?php
                    $args=array(
                        'paged' => $paged,
                        'post_type'=>'news',
                        'posts_per_page'=>5
                        );
                    ?>
                    <?php
                    $query = new WP_Query($args);
                    if($query->have_posts()):
                    while($query->have_posts()): $query->the_post(); ?>
                        <li class="cl">
                            <div class="fig">
                                <a href="<?php the_permalink(); ?>">
                                <?php
                                $thumbnail_id = get_post_thumbnail_id();
                                $thumbnail_url = wp_get_attachment_image_src($thumbnail_id,'tmb_cut_square');
                                $terms = wp_get_object_terms($post->ID,'news_cat');
                                if(has_post_thumbnail()): ?>
                                    <img src="<?php echo $thumbnail_url[0]; ?>" title="<?php the_title(); ?>" alt="<?php the_title(); ?>">
                                <?php else: ?>
                                    <img src="<?php echo get_template_directory_uri(); ?>/common/img/base/noimage_s.png" title="<?php the_title(); ?>" alt="<?php the_title(); ?>">
                                <?php endif; ?>
                                </a>
                            </div>
                            <div class="det">
                                <p class="list_hd">
                                    <span class="time"><?php the_time('Y年n月j日'); ?></span>
                                    <?php if(!empty($terms)): ?>
                                    <span class="term">カテゴリ:<?php foreach($terms as $term): ?><?php echo $term->name." "; ?><?php endforeach; ?>
                                    </span>
                                    <?php endif; ?>
                                </p>
                                <p class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
                                <p class="content"><a href="<?php the_permalink(); ?>"><?php echo mb_strimwidth(get_the_content(), 0, 80, "…", "utf8"); ?></a></p>
                            </div>
                        </li>
                    <?php endwhile; ?>
                    <?php endif; ?>
                    <?php
                        if ($query->max_num_pages > 1){//ページネーション
                            echo "<div id='pagenation'>";
                            echo paginate_links(
                                array(
                                'base' => get_pagenum_link(1).'%_%',
                                'format' => 'page/%#%/',
                                'current' => max(1, $paged),
                                'total' => $query->max_num_pages,
                                'prev_next' => true,
                                'prev_text' => 'PREV',
                                'next_text' => 'NEXT',
                                )
                            );
                            echo "</div>";
                        }
                        wp_reset_postdata();
                    ?>
                </ul>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

date.phpにWP_Queryなどのリクエストを書く必要はありません。
既にメインループのリクエストはおこなわれているからです。
date.phpにWP_Queryなどの記述を抜いた、以下のコードを書いてみてください。

<ul id="blog_list" class="cl">
                    <?php
                    if(have_posts()):
                    while(have_posts()): the_post(); ?>
                        <li class="cl">
                            <div class="fig">
                                <a href="<?php the_permalink(); ?>">
                                <?php
                                $thumbnail_id = get_post_thumbnail_id();
                                $thumbnail_url = wp_get_attachment_image_src($thumbnail_id,'tmb_cut_square');
                                $terms = wp_get_object_terms($post->ID,'news_cat');
                                if(has_post_thumbnail()): ?>
                                    <img src="<?php echo $thumbnail_url[0]; ?>" title="<?php the_title(); ?>" alt="<?php the_title(); ?>">
                                <?php else: ?>
                                    <img src="<?php echo get_template_directory_uri(); ?>/common/img/base/noimage_s.png" title="<?php the_title(); ?>" alt="<?php the_title(); ?>">
                                <?php endif; ?>
                                </a>
                            </div>
                            <div class="det">
                                <p class="list_hd">
                                    <span class="time"><?php the_time('Y年n月j日'); ?></span>
                                    <?php if(!empty($terms)): ?>
                                    <span class="term">カテゴリ:<?php foreach($terms as $term): ?><?php echo $term->name." "; ?><?php endforeach; ?>
                                    </span>
                                    <?php endif; ?>
                                </p>
                                <p class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
                                <p class="content"><a href="<?php the_permalink(); ?>"><?php echo mb_strimwidth(get_the_content(), 0, 80, "…", "utf8"); ?></a></p>
                            </div>
                        </li>
                    <?php endwhile; ?>
                    <?php endif; ?>
                </ul>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/08 11:48

    私の環境でも調べましたが、archive-news.phpを読んでいるようでしたので

    <?php
    $monthly_arc=array(
    'year'=>get_query_var('year'),
    'monthnum'=>get_query_var('monthnum')
    );
    if(empty($monthly_arc)){
    $args=array(
    'paged' => $paged,
    'post_type'=>'news',
    'posts_per_page'=>5
    );
    }else{
    $args=array(
    'paged' => $paged,
    'post_type'=>'news',
    'posts_per_page'=>5,
    'year'=>$monthly_arc['year'],
    'monthnum'=>$monthly_arc['monthnum']
    );
    }
    ?>

    として分岐することで実現しました。
    他にスマートなやり方があればコメントで教えていただけるとありがたいです。

    キャンセル

  • 2017/02/08 12:05

    テンプレートファイルがarchive-news.phpであった場合も、WP_Queryを書く必要はありません。
    分岐を消しても、同等の内容が表示されるはずなので、確認してみてください。

    キャンセル

  • 2017/02/08 12:21

    なるほど!WP_Queryはサイドバーとかの部分で使うんですね。
    archiveやarchive-xxなどファイル名が決まってるような場所では使わなくても情報が取れるんですね。
    ようやく理解できました。
    ありがとうございますm(_ _)m

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.11%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる