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

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

新規登録して質問してみよう
ただいま回答率
87.20%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

解決済

月別アーカイブを特定のカテゴリーのみにしたい

raidomaru
raidomaru

総合スコア105

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

2回答

0評価

0クリップ

4477閲覧

投稿2016/11/18 06:22

編集2016/11/22 12:08

###前提・実現したいこと
WordPressの中でアーカイブを作っています。
アコーディオン形式で年をクリックするとスライドダウンして、その年の投稿のある月と件数が表示される仕様です。
また、その月をクリックするとアーカイブへのリンクとなってます。

元々投稿のカテゴリーが一つでしたので
archive.php、category-a.php、single-a.phpに下記コードを記載していました。

###該当のソースコード

php

<div id="archives_year"> <ul class="menu_list"> <li> <?php $year_prev = null; $months = $wpdb->get_results("SELECT DISTINCT MONTH( post_date ) AS month , YEAR( post_date ) AS year, COUNT( id ) as post_count FROM $wpdb->posts WHERE post_status = 'publish' and post_date <= now( ) and post_type = 'post' GROUP BY month , year ORDER BY post_date DESC"); foreach($months as $month) : $year_current = $month->year; if ($year_current != $year_prev){ if ($year_prev != null){?> </ul> <?php } ?> <div class="main_menu"><span><?php echo $month->year; ?></span></div> <ul class="sub_menu"> <?php } ?> <li> <a href="<?php bloginfo('url') ?>/date/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>"> <?php echo date("n", mktime(0, 0, 0, $month->month, 1, $month->year)) ?> (<?php echo $month->post_count; ?>) </a> </li> <?php $year_prev = $year_current; endforeach; ?> </ul> </li> </ul> </div>

###発生している問題・エラーメッセージ

①追加で別のカテゴリーbを作ることになりました。
現在の記述ではカテゴリーaとb両方のアーカイブになっていますが、これを元のaのみにしたいです。
上記ソースのpost_typeの後に次のように書きましたがうまくいきませんでした。BDのテーブルが違うのかと考えてます。

php

and post_type = 'post' and slug = 'a'

②それとは別にイベントというカスタム投稿を作りそちらのアーカイブも作成することになりました。
event organizerというプラグインを使用しています。
https://ja.wordpress.org/plugins/event-organiser/
内容は絞れたのですが、投稿日ではなくイベント日時でのアーカイブにしたいです。
こちらはpost_typeを次のように変更しました。

php

and post_type = 'event'

SQLはそこまで知識がなくこちらのソースも数ヶ月前に調べながらどうにか作りました。
解決方法や別の作り方がありましたら、ご教授のほどよろしくお願いします。

###試したこと
下記ソースにしたところカテゴリーの絞りこみはできたのですが、記事数のカウントが増えてしまいました。
現在1記事のみしか公開していないのですが、4になってしまいます。

php

$year_prev = null; $months = $wpdb->get_results("SELECT DISTINCT MONTH( post_date ) AS month , YEAR( post_date ) AS year, COUNT( id ) as post_count FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id LEFT JOIN $wpdb->term_relationships ON $wpdb->posts.ID = $wpdb->term_relationships.object_id LEFT JOIN $wpdb->term_taxonomy ON $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id LEFT JOIN $wpdb->terms ON $wpdb->term_taxonomy.term_taxonomy_id = $wpdb->terms.term_id WHERE post_status = 'publish' and post_date <= now( ) and post_type = 'post' and slug = 'column' GROUP BY month , year ORDER BY post_date DESC");

###問題②解決方法
下記のようにソースを変更して解決しました。

php

$year_prev = null; $months = $wpdb->get_results("SELECT MONTH( StartDate ) AS month , YEAR( StartDate ) AS year, COUNT( DISTINCT id ) as post_count FROM $wpdb->posts LEFT JOIN $wpdb->eo_events ON $wpdb->posts.ID = $wpdb->eo_events.post_id WHERE post_status = 'publish' and post_date <= now( ) and post_type = 'event' GROUP BY month , year ORDER BY StartDate DESC");

良い質問の評価を上げる

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

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

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

気になる質問をクリップする

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

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

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

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

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

kei344

2016/11/22 11:20

まだ質問が「受付中」になっていますが、いったん「解決済」にされてはいかがでしょうか。また、解決されていないなら状況をお教えください。
raidomaru

2016/11/22 11:29

発生している問題①は解決しましたが、②についてはこれから取り組みます。
kei344

2016/11/22 11:43

それは失礼しました、がんばってください。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。