6.設定値をDBに格納する

この記事は 5.管理画面のHTMLを作る の続きです。

いよいよDBへ値の登録&呼び出しです。
expNoticeAdminPage関数は管理ページのHTMLに全力を注いできたので、未だフォーム以外のものが殆ど見当たりません。これに
$_POST[‘action’] == ‘update’
だった場合の処理を追加していきます。
DBに値を渡す関数としてupdate_option関数というものがあるみたいです。この関数のリファレンスページは日本語版はまだ無いらしいです。なのでリンク先は英語版。
言っていることは簡単で
update_option(名, 値)
で、それぞれ指定された値をoptionsテーブルに記録する、だけ。
「名」がoptionsテーブルに存在しない時は「値」を登録、存在する時は「値」を上書き、です。
「名」はフォームのinputでそれぞれにつけたnameと同じにするのがならわしらしいです。
変な値を書き込まれたらどうするんだろうとか、そのへんの検証はしてません。
とりあえず、このupdate_option関数を使ってパキパキ書きます。

  if ($_POST['action'] == 'update') {
    $katz_en_default_year_post = intval($_POST['katz_en_default_year']);
    update_option('katz_en_default_year', $katz_en_default_year_post);
    $katz_en_default_month_post = intval($_POST['katz_en_default_month']);
    update_option('katz_en_default_month', $katz_en_default_month_post);
    $katz_en_default_day_post = intval($_POST['katz_en_default_day']);
    update_option('katz_en_default_day', $katz_en_default_day_post);
    $katz_en_default_hour_post = intval($_POST['katz_en_default_hour']);
    update_option('katz_en_default_hour', $katz_en_default_hour_post);
    $katz_en_default_minute_post = intval($_POST['katz_en_default_minute']);
    update_option('katz_en_default_minute', $katz_en_default_minute_post);
    $katz_en_default_second_post = intval($_POST['katz_en_default_second']);
    update_option('katz_en_default_second', $katz_en_default_second_post);

    $katz_en_mae_html_post = $_POST['katz_en_mae_html'];
    update_option('katz_en_mae_html', $katz_en_mae_html_post);
    $katz_en_ato_html_post = $_POST['katz_en_ato_html'];
    update_option('katz_en_ato_html', $katz_en_ato_html_post);

    $katz_en_mae_css_post = $_POST['katz_en_mae_css'];
    update_option('katz_en_mae_css', $katz_en_mae_css_post);
    $katz_en_ato_css_post = $_POST['katz_en_ato_css'];
    update_option('katz_en_ato_css', $katz_en_ato_css_post);
  }

年月日時分秒の値6つとメッセージ2つ、スタイルシート2つの計10個を登録します。

登録が終わったらすかさず呼び出す。
呼び出しはget_option関数を使います。
これも使い方は簡単で
get_option(名, デフォルト値)
だけです。
「名」にupdate_option関数でつけた「名」を入れて、テーブルにその名前に対応する「値」があればそれが返ってきます。見つからなかった場合は「デフォルト値」を返す、「デフォルト値」を指定していなかった場合はfalseが返ってくるようです。

  $katz_en_default_year = get_option('katz_en_default_year', '0');
  $katz_en_default_month = get_option('katz_en_default_month', '0');
  $katz_en_default_day = get_option('katz_en_default_day', '60');
  $katz_en_default_hour = get_option('katz_en_default_hour', '0');
  $katz_en_default_minute = get_option('katz_en_default_minute', '0');
  $katz_en_default_second = get_option('katz_en_default_second', '0');
  $katz_en_mae_html = get_option('katz_en_mae_html', 'このページは **/**/** **:**:** まで有効です。');
  $katz_en_ato_html = get_option('katz_en_ato_html', 'このページの有効掲載期限は **/**/** **:**:** までです。<br />記載されていることの正確性を確認ねがいます。');
  $katz_en_mae_css = get_option('katz_en_mae_css', "text-align: right;
border-bottom: solid 1px #7aaeff;
background: #f2faff;
color: #454742;
line-height: 18px;
font-size: 0.8em;
margin-top: -8px;
margin-bottom: 14px;
padding: 0px 1em 0px 1em;");
  $katz_en_ato_css = get_option('katz_en_ato_css', "text-align: center;
border: solid 1px #ff0000;
background: #ffe1ff;
color: #222222;
line-height: 18px;
margin-bottom: 18px;
padding: 1.5em;");

こんなカンジで呼び出してみる。5.管理画面のHTMLを作る で書いたvalueをデフォルト値として再度指定しておく。
こうすればこの管理画面に初めてアクセスした時にデフォルト値としてそれぞれの項目に値を入れておける。
スタイルシートはちょっと細かく書いてみた。

せっかく値を取得したのだから、取得した値をHTMLの中に反映させたい。
それぞれの値が入る部分を

<?=$katz_en_default_year; ?>

こんなカンジで置き換える。

ここまでやってできたのがコレ。

<?php
/*
Plugin Name: Expiration Notice
Plugin URI: http://katzplus.com/
Description: 最終更新日から一定期間経過した記事に対して、指定日数以上経過していることを表示します。
Author: katz
Version: 0.1
Author URI: http://katzplus.com/
*/

// 実際のショートコード用のソースここから
add_shortcode('exp_notice', 'expNoticeAdd');
function expNoticeAdd($param) {
  extract(
    shortcode_atts(
      array( 'y' => '0'
            ,'m' => '0'
            ,'d' => '0'
            ,'h' => '0'
            ,'i' => '0'
            ,'s' => '0'
      )
      , $param
    )
  );
  $ret = "HOE ".$y.$m.$d.$h.$i.$s." HOE";
  return $ret;
}
// 実際のショートコード用のソースここまで

// 管理画面用のソースここから
add_action('admin_menu', 'expNoticeAdmin');
function expNoticeAdmin() {
# add_submenu_page('options-general.php', 'Expire Notice Configure', 'Expire Notice', '0', __FILE__, 'expNoticeAdminPage');
 add_options_page('Expiration Notice Configure', 'Expiration Notice', '0', __FILE__, 'expNoticeAdminPage');
}
function expNoticeAdminPage () {
  if ($_POST['action'] == "update") {
    $katz_en_default_year_post = intval($_POST['katz_en_default_year']);
    update_option('katz_en_default_year', $katz_en_default_year_post);
    $katz_en_default_month_post = intval($_POST['katz_en_default_month']);
    update_option('katz_en_default_month', $katz_en_default_month_post);
    $katz_en_default_day_post = intval($_POST['katz_en_default_day']);
    update_option('katz_en_default_day', $katz_en_default_day_post);
    $katz_en_default_hour_post = intval($_POST['katz_en_default_hour']);
    update_option('katz_en_default_hour', $katz_en_default_hour_post);
    $katz_en_default_minute_post = intval($_POST['katz_en_default_minute']);
    update_option('katz_en_default_minute', $katz_en_default_minute_post);
    $katz_en_default_second_post = intval($_POST['katz_en_default_second']);
    update_option('katz_en_default_second', $katz_en_default_second_post);

    $katz_en_mae_html_post = $_POST['katz_en_mae_html'];
    update_option('katz_en_mae_html', $katz_en_mae_html_post);
    $katz_en_ato_html_post = $_POST['katz_en_ato_html'];
    update_option('katz_en_ato_html', $katz_en_ato_html_post);

    $katz_en_mae_css_post = $_POST['katz_en_mae_css'];
    update_option('katz_en_mae_css', $katz_en_mae_css_post);
    $katz_en_ato_css_post = $_POST['katz_en_ato_css'];
    update_option('katz_en_ato_css', $katz_en_ato_css_post);
  }
  $katz_en_default_year = get_option('katz_en_default_year', '0');
  $katz_en_default_month = get_option('katz_en_default_month', '0');
  $katz_en_default_day = get_option('katz_en_default_day', '60');
  $katz_en_default_hour = get_option('katz_en_default_hour', '0');
  $katz_en_default_minute = get_option('katz_en_default_minute', '0');
  $katz_en_default_second = get_option('katz_en_default_second', '0');
  $katz_en_mae_html = get_option('katz_en_mae_html', 'このページは **/**/** **:**:** まで有効です。');
  $katz_en_ato_html = get_option('katz_en_ato_html', 'このページの有効掲載期限は **/**/** **:**:** までです。<br />記載されていることの正確性を確認ねがいます。');
  $katz_en_mae_css = get_option('katz_en_mae_css', "text-align: right;
border-bottom: solid 1px #7aaeff;
background: #f2faff;
color: #454742;
line-height: 18px;
font-size: 0.8em;
margin-top: -8px;
margin-bottom: 14px;
padding: 0px 1em 0px 1em;");
  $katz_en_ato_css = get_option('katz_en_ato_css', "text-align: center;
border: solid 1px #ff0000;
background: #ffe1ff;
color: #222222;
line-height: 18px;
margin-bottom: 18px;
padding: 1.5em;");
?>
 <div class="wrap">
  <div id="icon-options-general" class="icon32">
   <br>
  </div>
  <h2>Expiration Notice Configure</h2>
  <form method="post" action="<?= str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
<?php wp_nonce_field('update-options'); ?>

  <h3>デフォルトの有効期日</h3>
   <table class="form-table" style="width: 480px;">
    <tr>
     <td style="width: 80px;"><input type="text" size="2" name="katz_en_default_year" value="<?=$katz_en_default_year; ?>" style="text-align:right;" />年</td>
     <td style="width: 80px;"><input type="text" size="2" name="katz_en_default_month" value="<?=$katz_en_default_month; ?>" style="text-align:right;" />月</td>
     <td style="width: 80px;"><input type="text" size="2" name="katz_en_default_day" value="<?=$katz_en_default_day; ?>" style="text-align:right;" />日</td>
     <td style="width: 80px;"><input type="text" size="2" name="katz_en_default_hour" value="<?=$katz_en_default_hour; ?>" style="text-align:right;" />時</td>
     <td style="width: 80px;"><input type="text" size="2" name="katz_en_default_minute" value="<?=$katz_en_default_minute; ?>" style="text-align:right;" />分</td>
     <td style="width: 80px;"><input type="text" size="2" name="katz_en_default_second" value="<?=$katz_en_default_second; ?>" style="text-align:right;" />秒</td>
    </tr>
   </table>
   <p>ショートコードに有効期日を指定しなかった場合、ここで指定した期日が使用されます。</p>

  <h3>表示するメッセージ</h3>
   <h4>有効期日前メッセージ</h4>
    <textarea name="katz_en_mae_html" cols="90" rows="2"><?=$katz_en_mae_html; ?></textarea>
   <h4>有効期日経過後メッセージ</h4>
    <textarea name="katz_en_ato_html" cols="90" rows="2"><?=$katz_en_ato_html; ?></textarea>
   <p>下記の置き換えパターンが使用できます。</p>
   <table width="300px">
    <tr>
     <th>有効期限</th>
     <td>%target_date%</td>
    </tr>
    <tr>
     <th>最終更新日時</th>
     <td>%modified_date%</td>
    </tr>
    <tr>
     <th>超過日時</th>
     <td>%overtime%</td>
    </tr>
    <tr>
     <th>残存日時</th>
     <td>%timeleft%</td>
    </tr>
   </table>

  <h3>メッセージのスタイルシート</h3>
   <h4>有効期日前メッセージのスタイルシート</h4>
    <textarea name="katz_en_mae_css" cols="90" rows="2"><?=$katz_en_mae_css; ?></textarea>
   <h4>有効期日経過後メッセージのスタイルシート</h4>
    <textarea name="katz_en_ato_css" cols="90" rows="2"><?=$katz_en_ato_css; ?></textarea>
   <p>スタイルシートを独自のものに変更することができます。</p>

   <input type="hidden" name="action" value="update" />
   <input type="hidden" name="page_options" value="new_option_name,some_other_option,option_etc" />

   <p class="submit">
    <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
   </p>
  </form>
 </div>
<?php
}
// 管理画面用のソースここまで
?>

うむ。設定値の登録&呼び出しできた。

Next is [7.設定値をショートコードに反映させる]