
目次
get_calendar()の用途
get_calendar() は、WordPress の標準テンプレートタグのひとつで、月別の投稿カレンダーを HTML テーブル形式で出力する関数です。
例えば、ブログのサイドバーに「2025年6月」のようなカレンダーを表示し、投稿がある日付にはリンクが張られる…といった表示が可能です。
get_calendar()の基本構文
get_calendar( string $initial = true, bool $echo = true )get_calendar()のパラメータ
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
$initial | string/bool | true | 曜日の表示を省略形(例:月、火…)にするか。false にすると「月曜日」「火曜日」のように全表示。 |
$echo | bool | true | 画面に出力(true)するか、文字列として返す(false)か。 |
出力される内容(HTML構造)
基本的には以下のようなHTMLテーブルが出力されます:
<table id="wp-calendar">
<caption>2025年6月</caption>
<thead>
<tr>
<th scope="col">日</th>
<th scope="col">月</th>
...
</tr>
</thead>
<tbody>
<tr>
<td> </td>
<td><a href="/2025/06/02/">2</a></td>
...
</tr>
</tbody>
</table>get_calendar()のカスタマイズしたい場合の方法
get_calendar() は出力HTMLがある程度固定されているため、HTML構造を自由に変更することは困難です。ただし、CSSでのスタイリングや フィルターフック による一部カスタマイズは可能です。
投稿がある日だけリンクが張られる
- 各日付にリンクがあるのは、その日に公開された投稿が存在する日のみです。
get_calendar()は自動的にwp_postsテーブルをクエリし、該当日の投稿数をチェックします。
get_calendar()の使用例(ウィジェットやテンプレート)
サイドバーなどで使う
<?php get_calendar(); ?>フッターなどにリンクなしのカレンダーを取得(変数で受け取る)
$calendar = get_calendar(true, false);
echo '<div class="calendar-box">' . $calendar . '</div>';get_calendar()のカスタマイズ
フィルター(代表的なもの)
| フィルター名 | 概要 |
|---|---|
get_calendar | カレンダー全体の HTML 出力にフィルター |
get_calendar_month_url | 月リンクの URL をカスタマイズ可能 |
get_calendar_post_type | カレンダーに反映させる投稿タイプを変更可能(デフォルトは post) |
例:カスタム投稿タイプに対応させる
add_filter( 'get_calendar_post_type', function( $post_type ) {
return 'news'; // 例:news というカスタム投稿タイプ
});内部で使われている主な関数
| 関数名 | 説明 |
|---|---|
calendar_week_mod() | 週の開始曜日に合わせて曜日インデックスを調整 |
get_option( 'start_of_week' ) | WordPress管理画面の「週の始まり」設定を取得 |
get_month_link() | 各月のリンクを生成 |
get_day_link() | 各日のリンクを生成 |
get_calendar()の注意点
| 項目 | 内容 |
|---|---|
| カスタム投稿タイプ | デフォルトでは非対応(要フィルター追加) |
| カスタムHTML構造 | 変更しにくい。見た目のカスタマイズはCSS推奨 |
| 曜日順の変更 | start_of_week 設定と calendar_week_mod() に依存 |
get_calendar()のまとめ
| 項目 | 内容 |
|---|---|
| 関数名 | get_calendar() |
| 主な用途 | 投稿のある日をリンク付きで月表示するカレンダー |
| カスタマイズ性 | HTMLは固定/スタイルはCSSで対応/投稿タイプはフィルターで対応 |
| 適した場所 | サイドバー、ウィジェット、フッターなど |
もし「自作で柔軟なカレンダーを作りたい」「投稿内容に応じてカレンダーの表示を変えたい」といった要望があれば、get_calendar() を使わずに、独自ロジック+ get_posts() などでカレンダーを組む方法もご紹介可能です。必要に応じてお知らせください。