予約カレンダー共通のメッセージフィルター

予約カレンダーはプログラムにより予約状況を調べ <table> タグを利用して一覧表示します。予約処理の入り口となるためその役割は重要です。

そのためより見易い、あるいはデザインに優れたカレンダーを表示できるように、タグに様々なclass属性が付与されていると同時に、表示内容を変更できるようにメッセージフィルターが準備されています。

ここではカレンダーで共通するメッセージフィルターとサンプルプログラムを掲載します。

説明はVer.1.19以降に対応しますがそれ以前の場合でも同様のものもあります。詳細は各予約カレンダーの説明をご確認下さい。

メッセージフィルターを利用しない通常の表示

normal_calendar

メッセージフィルターを利用した表示例

cmnfilter_nm

表示例のショートコードは次の通りです(xxは予約品目のpost id)。

[monthly_calendar id="xx" pagination="2" calendar_id="myCalendar"]

各メッセージフィルターは表示形式の異なる予約カレンダーで共通で、以下の通りです。

  • mtssb_calendar_before
    通常は何も表示しません。複数のページに同じカレンダーを表示したい場合や、プログラムを利用して日付毎異なるキャッチを表示するなどに利用できます。
  • mtssb_caption
    月カレンダーの当該年月表示を書き換える場合に利用します。
  • mtssb_prev_pagination
    前月表示のリンク文字列を変更したい場合に利用します。
  • mtssb_next_pagination
    次月表示のリンク文字列を変更したい場合に利用します。
  • mtssb_day
    カレンダー内の日付文字を変更したい場合に利用します。
  • mtssb_calendar_after
    通常は何も表示しません。mtssb_calendar_beforeと同様です。

参考図で利用したメッセージフィルター関数は次の通りです。

<?php
// メッセージをカレンダー上部に表示する
add_filter('mtssb_calendar_before', 'calendarBefore', 10, 2);
function calendarBefore($str, $cid) {
  if ($cid == 'myCalendar') {
    return 'カレンダー上部に表示するメッセージ';
  }
  return $str;
}

// キャプションのカレンダー年月表示を書き換える
add_filter('mtssb_caption', 'calendarCaption', 10, 2);
function calendarCaption($str, $param) {
  if ($param['cid'] == 'myCalendar') {
    return '<i>' . date('F, Y', $param['month']) . '</i>';
  }
  return $str;
}

// 前・次月を書き換える
add_filter('mtssb_prev_pagination', 'prevPagination', 10,2);
function prevPagination($str, $param) {
  if ($param['cid'] == 'myCalendar') {
    return sprintf('前月 %s', date_i18n('Y/n', $param['prev']));
  }
  return $str;
}

add_filter('mtssb_next_pagination', 'nextPagination', 10, 2);
function nextPagination($str, $param) {
  if ($param['cid'] == 'myCalendar') {
    return sprintf('次月 %s', date_i18n('Y/n', $param['next']));
  }
  return $str;
}

// メッセージをカレンダー下部に表示する
add_filter('mtssb_calendar_after', 'calendarAfter', 10, 2);
function calendarAfter($str, $cid) {
  if ($cid == 'myCalendar') {
    return 'カレンダー下部に表示するメッセージ';
  }
  return $str;
}

// 日付を修飾する
add_filter('mtssb_day', 'calendarDay', 10, 2);
function calendarDay($str, $param) {
  if ($param['cid'] == 'myCalendar') {
    return sprintf('<i>%s</i>', date('j', $param['day']));
  }
  return $str;
}

 メッセージフィルターの利用と注意事項

メッセージの書き換えはPHPプログラムを利用し、テーマディレクトリにある「functions.php」ファイルに追加して機能させるようにします。

テーマディレクトリに「functions.php」ファイルがない場合は、新たにそのファイルを用意して下さい。

プログラムは一般的に「テキストエディタ」を利用しますが、利用するサーバーにより漢字コードやテキストの行末コードが異なり、テキストエディタでの設定が異なっている場合は文字化けの原因となる場合があります。

また、プログラムに不具合があると画面が白く表示されたり、エラー表示されることがあります。

その場合は元のプログラムファイルで置き換えられるように、バックアップを用意して作業を進めるようにお願いします。

WordPressの「外観 ー エディター」機能を利用してエラーになると、この機能で書き換えできなくなる場合があります。必ずFTPなどWordPress以外のユーティリティ利用をお勧めします。

追補1)時間割の下に文言を挿入するメッセージフィルター

メッセージフィルター「mtssb_timetable_after」を利用してメッセージを挿入することができます。

add_filter('mtssb_timetable_after', 'timetable_after', 10, 2);
function timetable_after($msg, $param) {
     return '<div style="color:red; text-align:center;">○ 予約可 △ 残数少 × 満席</div>';
}

表示は次のようになります。

メッセージフィルター関数の2番目の引数として渡される値は、次の値が設定された配列です。

$param = ['cid' => calendar_idの値, 'aid' => 予約品目のID ];

(2021-05-31)