Title: 特定カテゴリーの月別アーカイブ
Last modified: 2025年5月13日

---

# 特定カテゴリーの月別アーカイブ

 *  解決済 [chatm](https://ja.wordpress.org/support/users/chatm/)
 * (@chatm)
 * [1年、 5ヶ月前](https://ja.wordpress.org/support/topic/%e7%89%b9%e5%ae%9a%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e3%81%ae%e6%9c%88%e5%88%a5%e3%82%a2%e3%83%bc%e3%82%ab%e3%82%a4%e3%83%96/)
 * wordpress6.8.1 でオリジナルテーマでサイトを作成しています。
   特定のカテゴリーの
   サイドバーに月別アーカイブ（ドロップダウン）で設置しましたが、特定のカテゴリー
   だけ表示させたいのですが、うまくいきません。いろいろなサイトを見て、function.
   phpに表示させたくないカテゴリーIDを除外するコードを記入しても除外されず全部の
   記事が収納されてドロップダウンリストとして表示されてしまいます。サイドバーのドロップ
   ダウンの記述
 *     ```wp-block-code
       <div class="archive">      <h3>月別アーカイブ</h3>    <select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">  <option disabled selected value>選択してください</option>  <?php wp_get_archives( 'type=monthly&format=option&post_type=post&show_post_count=1' ); ?>    </select> </div><!-- /archive -->
       ```
   
 * function.php　ドロップダウンの記述
 *     ```wp-block-code
       // カテゴリの投稿数をaタグの中に（月別アーカイブ）add_filter( 'get_archives_link', 'my_archives_link' );function my_archives_link( $output ) {	$output = preg_replace('/<\/a>\s*(&nbsp;)\((\d+)\)/','（$2）</a>',$output);	return $output;}
       ```
   
 * 教えて頂けると助かります。

2件の返信を表示中 - 1 - 2件目 (全2件中)

 *  トピック投稿者 [chatm](https://ja.wordpress.org/support/users/chatm/)
 * (@chatm)
 * [1年、 5ヶ月前](https://ja.wordpress.org/support/topic/%e7%89%b9%e5%ae%9a%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e3%81%ae%e6%9c%88%e5%88%a5%e3%82%a2%e3%83%bc%e3%82%ab%e3%82%a4%e3%83%96/#post-11691898)
 * すみません、自己解決しました。カテゴリーを絞れるコードをsidebar.phpとfunction.
   phpの両方に設定して、月別アーカイブに特定のカテゴリーだけ表示させることができ
   ました。
   サイドバーはドロップダウンの表示、投稿件数（）表示「’show_post_count’
   => 1,」付きの設定です。●はカテゴリーIDの番号（数字）blogはこの場合のカテゴリー
   スラッグです。sidebar.php
 *     ```wp-block-code
       <div class="archive">    <h3>月別アーカイブ</h3>    <select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">  <option disabled selected value>選択してください</option> <?php wp_get_archives(array(    'type' => 'monthly',    'format' => 'option',    'show_post_count' => 1,    'category' => ● // blogカテゴリーのみ)); ?></select> </div><!-- /archive -->
       ```
   
 * function.php に下記を記述しました。
   ●はカテゴリーIDの番号、blogはこの場合のカテゴリー
   スラッグです。お使いの場合は皆様が設定されたカテゴリー名を入れて下さい。もっと
   素敵なコードがあるのでしょうが、私の場合は、カテゴリースラッグとカテゴリーID番号
   の2つをfunction.phpに記載しないと、カテゴリーで絞りこみできませんでした。
 *     ```wp-block-code
       //特定カテゴリー月別アーカイブ（blogカテゴリーのスラッグblogのみ表示）function custom_get_archives_where($where, $args) {    global $wpdb;    $where .= $wpdb->prepare(" AND ID IN (SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id = (SELECT term_id FROM {$wpdb->terms} WHERE slug = %s))", 'blog');    return $where;}add_filter('getarchives_where', 'custom_get_archives_where', 10, 2);//特定カテゴリー月別アーカイブ（blogカテゴリーID＝●のみ表示）function filter_blog_archives($query) {    if ($query->is_main_query() && !is_admin() && is_archive()) {        $query->set('category__in', array(●)); // blogカテゴリーのみ表示    }}add_action('pre_get_posts', 'filter_blog_archives');
       ```
   
 *  トピック投稿者 [chatm](https://ja.wordpress.org/support/users/chatm/)
 * (@chatm)
 * [1年、 5ヶ月前](https://ja.wordpress.org/support/topic/%e7%89%b9%e5%ae%9a%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e3%81%ae%e6%9c%88%e5%88%a5%e3%82%a2%e3%83%bc%e3%82%ab%e3%82%a4%e3%83%96/#post-11691904)
 * 解決したと思ったのですが、他のカテゴリーのトップページの一覧まで絞り込んでしま
   って、他のカテゴリーのアーカイブ一覧が表示されなくなってしまいました。
   なので、
   AIと検討しながら作った下記のコードが完成形になります。（文字化け防止コードの指定
   もあり）●はカテゴリーIDの番号、blogはこの場合のカテゴリースラッグです。ドロップ
   ダウンで月別アーカイブの投稿数（）も取得する
 * ‘limit’ => 24, // 2年間分の月別アーカイブを取得
   ‘limit’ => ”, // 空にすると、
   全期間のアーカイブが表示されるsidebar.php
 *     ```wp-block-code
       <div class="archive">    <h3>月別アーカイブ</h3>        <select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">        <option disabled selected value>選択してください</option>        <?php        $archives = wp_get_archives(array(            'type' => 'monthly',            'limit' => 12,            'echo' => false,            'format' => 'custom'        ));        $dom = new DOMDocument();        @$dom->loadHTML(mb_convert_encoding($archives, 'HTML-ENTITIES', 'UTF-8')); // UTF-8に変換して解析        foreach ($dom->getElementsByTagName('a') as $link) {            $url = $link->getAttribute('href');            $filtered_url = add_query_arg('cat', ●, $url);            // 年・月を取得            preg_match('/(\d{4})\/(\d{2})/', $url, $matches);            if (!empty($matches)) {                $year = intval($matches[1]);                $month = intval($matches[2]);                // blogカテゴリーの投稿数を取得                $args = array(                    'category__in' => array(●),                    'year' => $year,                    'monthnum' => $month,                    'posts_per_page' => -1,                );                $posts = get_posts($args);                $post_count = count($posts);            } else {                $post_count = 0; // デフォルトで0を設定            }            echo '<option value="' . esc_url($filtered_url) . '">' . htmlspecialchars($link->nodeValue, ENT_QUOTES, 'UTF-8') . ' (' . $post_count . ')</option>';        }        ?>    </select></div><!-- /archive -->
       ```
   
 * ↓投稿数なしの場合
 *     ```wp-block-code
       <div class="archive">    <h3>月別アーカイブ</h3>        <select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">        <option disabled selected value>選択してください</option>        <?php        $archives = wp_get_archives(array(            'type' => 'monthly',            'limit' => 12,            'echo' => false,            'format' => 'custom'        ));        $dom = new DOMDocument();        @$dom->loadHTML(mb_convert_encoding($archives, 'HTML-ENTITIES', 'UTF-8')); // UTF-8に変換して解析        foreach ($dom->getElementsByTagName('a') as $link) {            $url = $link->getAttribute('href');            $filtered_url = add_query_arg('cat', ●, $url);            echo '<option value="' . esc_url($filtered_url) . '">' . htmlspecialchars($link->nodeValue, ENT_QUOTES, 'UTF-8') . '</option>';        }        ?>    </select></div><!-- /archive -->
       ```
   
 * function.php の記述　他のカテゴリーのアーカイブに影響をあたえない設定
 *     ```wp-block-code
       //特定カテゴリー月別アーカイブ（blogカテゴリーのスラッグblogのみ表示）function filter_blog_archives($query) {    if ($query->is_main_query() && !is_admin() && is_archive()) {        // 特定のカテゴリースラッグ（blog）の場合のみ絞り込み        if (is_category('blog')) {            $query->set('category__in', array(●));        }    }}add_action('pre_get_posts', 'filter_blog_archives');
       ```
   

2件の返信を表示中 - 1 - 2件目 (全2件中)

 トピック「特定カテゴリーの月別アーカイブ」には新たに返信することはできません。

 * フォーラム: [使い方全般](https://ja.wordpress.org/support/forum/how-to-and-troubleshooting/)
 * 2件の返信
 * 1人の参加者
 * 最後の返信者: [chatm](https://ja.wordpress.org/support/users/chatm/)
 * 最後の活動: [1年、 5ヶ月前](https://ja.wordpress.org/support/topic/%e7%89%b9%e5%ae%9a%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc%e3%81%ae%e6%9c%88%e5%88%a5%e3%82%a2%e3%83%bc%e3%82%ab%e3%82%a4%e3%83%96/#post-11691904)
 * 状態: 解決済

## トピック

### 人気のトピック

### 返信がないトピック

### サポート関連ではないトピック

### 解決済みのトピック

### 未解決のトピック

### すべてのトピック
