(25) 【WORDPRESS】設定画面付きプラグインを作成

投稿者: | 2017年8月27日

1,301 views

この記事は最終更新から 2300日 が経過しています。

詳細は以下の公式ページを参照してください。
WordPress Codex:プラグインの作成手順
WordPress Codex:プラグインAPI
WordPress Codex:設定ページの作成

プラグインの作り方がよくわからなかったときにこちらのページを拝見した。
WordPressのプラグインの作り方 基本編
「こんな面白いことができるんだ!」
と真似して実装させていただいた。

「こんにちは!」←これは今回作成したプラグインで表示しています。
今回は、上記の参照サイトのサンプルコードに加えて、各あいさつ文を設定画面で自由に編集可能にしてみる。
詳細は上述の WordPress Codex のページを参照のこと。

■プログラム

同機能で wp_optionへの書き込みオプション数を 1個にまとめたプログラムはこちら(↓)
(35) WordPressのオプションデータを1レコードにまとめる。

greeting2.php

<?php
/* Plugin Name: Greeting2 */
////////////////////////////////////////////////////////////////////////
global $g_ary_options_Greeting;
$g_ary_options_Greeting = array(
    'Greeting_morning'  =>array('朝のあいさつ','おはようございます!'),
    'Greeting_afternoon'=>array('昼のあいさつ','こんにちは!'),
    'Greeting_evening'  =>array('夜のあいさつ','こんばんは!') );
////////////////////////////////////////////////////////////////////////
// 当該プラグインクラスに実体を持たせる。→ __construct()から処理起動
if (class_exists('Greeting')) {
  $greeting = new Greeting();
}
////////////////////////////////////////////////////////////////////////
class Greeting {
  public function __construct() {
    //------------------------------------------------------------------
    // ショートコードを登録
    add_shortcode('greeting2', array($this, 'proc_shortcode'));
    // テキストウィジェットの中でショートコードを実行可能に設定
    add_filter('widget_text', 'do_shortcode');
    //------------------------------------------------------------------
    // メニュー作成可能な状態になったタイミングでコールさせる。
    add_action('admin_menu', array($this, 'proc_create_menu'));
    //------------------------------------------------------------------
    // 管理画面初期化のタイミングで編集画面で[決定]押下時処理をコールさせる。
    add_action('admin_init', array($this,'proc_register_settings'));
    //------------------------------------------------------------------
    // プラグインの有効化、無効化のタイミングでコールさせる。
    register_activation_hook(  __FILE__, array($this, 'proc_plugin_activate'));
    register_deactivation_hook(__FILE__, array($this, 'proc_plugin_deactivate'));
  }
  //////////////////////////////////////////////////////////////////////
  public function proc_plugin_activate(){
    global $g_ary_options_Greeting;
    //------------------------------------------------------------------
    // DBの optionテーブルにデータを登録(もし未登録ならば)する。
    foreach($g_ary_options_Greeting as $option => $ary_prm){
      add_option($option, $ary_prm[1]);
    }
  }
  //////////////////////////////////////////////////////////////////////
  public function proc_plugin_deactivate(){
    global $g_ary_options_Greeting;
    //------------------------------------------------------------------
    // DBの optionテーブルからデータを削除する。
    foreach($g_ary_options_Greeting as $option => $ary_prm){
      delete_option($option);
    }
  }
  //////////////////////////////////////////////////////////////////////
  public function proc_shortcode() {
    //------------------------------------------------------------------
    // 時刻に応じてあいさつを選択する。
    $h = intval(date_i18n('G'));    // 現在時刻を取得 (G: Hour, 24-hour, without leading zeros)
    if(     4 <= $h && $h < 10){ $str = get_option('Greeting_morning');}
    elseif(10 <= $h && $h < 18){ $str = get_option('Greeting_afternoon');}
    else{                        $str = get_option('Greeting_evening');}
    return $str;
  }
  //////////////////////////////////////////////////////////////////////
  public function proc_create_menu() {
    //------------------------------------------------------------------
    // [設定]メニューの配下に「独自CSS設定」メニューを追加する。
    add_submenu_page('options-general.php', 'Greeting Settings', 'Greeting Settings', 'administrator', __FILE__, array($this, 'proc_display_settings_page'));
  }
  //////////////////////////////////////////////////////////////////////
  public function proc_register_settings() {
    //------------------------------------------------------------------
    // 3個のオプションをWPのオプション設定メカニズムに組み込む。
    global $g_ary_options_Greeting;
    foreach($g_ary_options_Greeting as $option => $ary_prm){
      register_setting('Greeting-settings-group', $option, array($this, 'proc_handle_sanitization'));
    }
  }
  //////////////////////////////////////////////////////////////////////
  public function proc_handle_sanitization($txt) {
    //------------------------------------------------------------------
    // optionへの設定値をサニタイジングして返す。
    return sanitize_text_field($txt);
  }
  //////////////////////////////////////////////////////////////////////
  public function proc_display_settings_page() {
    //------------------------------------------------------------------
    // 設定画面上の編集欄を表示する。
    $html_input = "";
    global $g_ary_options_Greeting;
    foreach($g_ary_options_Greeting as $option => $ary_prm){
      $value = esc_attr(get_option($option));
$html_input .= <<< EOM
    <tr valign="top">
    <th scope="row">{$ary_prm[0]}</th>
    <td><input type="text" name="{$option}" value="{$value}" /></td>
    </tr>
EOM;
    }
?>
<div class="wrap">
<h2> Greeting Setting</h2>
<p>Short code : <span style="background:#fff;color:#00f;padding:3px 5px;font-size:1.2rem">[greeting2]</span></p>
<form method="post" action="options.php">
  <?php settings_fields('Greeting-settings-group'); ?>
  <?php do_settings_sections('Greeting-settings-group'); ?>
  <table class="form-table">
    <?php echo $html_input; ?>
  </table>
<?php
  submit_button();
?>
</form>
</div>
<?php
  }
}     // end of class
?>

■プラグイン登録

(1) まず、上記のプログラムを greeting2.php として作成する。

※必ず「文字コードUTF-8」のテキストファイルとして作成すること。

(2) 次に、(1)で作成した greeting2.php を ZIPファイル化する。

(3) 「プラグイン」-「新規追加」でZIPファイルをアップロードする。

当然有効化しておく。

■設定画面で自由に編集

プラグインを有効化すると、ダッシュボードのメニューに上記プログラムで登録したメニューが表示される。
これを選択すると上記プログラムで作成した設定画面が表示される。

■実際に使う

今回作成したプラグインは、各種ページやウィジェット内で [greeting2] というショートコードが使用できるようになるというもの。
何か気に入ってます、これ^^


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)