HippoBlog
Web開発に関する備忘録や
日々の雑記ブログ
  • #WordPress
  • 2019年10月25日
ENTRY TITLE

[wordpress] プラグインをつくる

TEXT BY @hippohack@hippohack
TEXT BY @hippohack@hippohack
  • このエントリーをはてなブックマークに追加

ローカルでの利用?自分でファイル置く?を想定。WordPressの公式リポジトリにはホストしない。
細かい実装はしないので、プラグインとして機能させる大枠のところまで。

プラグインをつくる

ファイルヘッダー

  • /plugins/hippo-plugin/hippo-plugin.php を作成。
  • ヘッダーを適切に記述することで管理画面のプラグイン一覧に表出。

[/plugins/hippo-plugin/hippo-plugin.php]

<?php
/*
Plugin Name: Hippo Plugin
Plugin URI: null
Description: null
Version: 1.0.0
Author: @hippohack
Author URI: https://www.hippohack.me
License: GPL2
*/

classで構成

class HippoPlugin
{
  static function init() {
    return new self();
  }

  function __construct() {
    if (is_admin() && is_user_logged_in()) {
      add_action('admin_menu', [$this, '_hp_add_submenu']);
    }
  }

  ︙

  function _hp_plugin_activate() {
      // hoge
  }

register_activation_hook で初期化

class外で実行。
ここで update_option を使って初期データ入れておく。

register_activation_hook( __FILE__, ['HippoPlugin', '_hp_plugin_activate'] );

初回のインストール時のみ実行させるため、データを格納して判定する。
register_activation_hook は再有効化時にも実行されるため。

function _hp_plugin_activate() {
    if (!get_option('_hp_installed')) {
        // something
        update_option('_hp_installed', true);
    }
}  

■ 参考

設定画面

サイドバーに設定へのリンクを設置する

  • admin_menu フックを利用して add_submenu_page を呼ぶメソッドをコール。
  • add_submenu_page
    • http://developer.wordpress.org/reference/functions/add_submenu_page/
    • 引数
      • 親のスラッグ(どの設定ページでよばれるか?)
      • ページタイトル
      • メニュータイトル
      • ユーザー権限レベル
      • メニューを参照するスラッグ(次の引数のメソッドを持ってるファイル)
      • コンテンツを表示するメソッド名(ここでは、_hp_admin_page

class

function __construct() {
  if (is_admin() && is_user_logged_in()) {
    add_action('admin_menu', [$this, '_hp_add_submenu']);
  }
}

function _hp_add_submenu() {
  add_submenu_page('options-general.php', 'HippoPlugin Setting', 'HippoPlugin Setting', 8, __FILE__, [$this, '_hp_admin_page']);
}

function _hp_admin_page() {
  require dirname(__FILE__) . '/hippo-plugin-admin.php';
}

■ 参考

add_actionをクラス内で使う場合

  • 配列で最初にインスタンスを渡す。

class

public function __construct() {
    add_action( 'save_post', array( $this, 'wpdocs_save_posts' ) );
}

function wpdocs_save_posts() {
    // hoge
}

参考

追記

  • ↓でもいけた。

class

public function __construct() {
    add_action( 'save_post', 'Klass::wpdocs_save_posts' );
}

必要になる基本メソッド

  • update_option('key', 'value');
    • wp_optionsテーブルに保存する。
    • string, integer, array, object を格納可能。
  • get_option('key')
    • 読み込み。
  • 注意
    • グローバルに使われるテーブルのため、keyの命名には注意。

設定画面のフォーム作成

_hp_admin_page で読み込んでる hippo-plugin-admin.php に記述。

[hippo-plugin-admin.php]

 <form method="post" action="">
    <input type="hidden" name="posted" value="true">

    <table class="form-table">
      <tr valign="top">
        <th scope="row">_hp_hoge</th>
        <td>
          <input
            type="text"
            name="_hp_hoge"
            value="<?php echo esc_attr( $settings->_hp_hoge ); ?>"
            class="regular-text code"
          >
          <div><small>色は匂へど散りぬるを、我が世たれぞ常ならむ。有為の奥山今日越えて、浅き夢見じ、酔ひもせず。</small></div>
        </td>
      </tr>
      ︙
    </table>

    <?php settings_fields( 'hippo-plugin-settings' ); ?>
    <?php do_settings_sections( 'hippo-plugin-settings' ); ?>

    <?php submit_button(); ?>
  </form>

settings_fieldsdo_settings_sections の設置が必須かな。
と言いつつ理解しておらず、register_setting を使えてなかった。

  function _hp_register_mysettings() {
    register_setting( 'hippo-plugin-settings', 'one' );
    register_setting( 'hippo-plugin-settings', 'two' );
    register_setting( 'hippo-plugin-settings', 'three' );
  }

て書いたが、ほんとに必要??

■ 追記

  • register_setting を適切に使えば、update_optionの処理が不要。
  • postで投げればうまく処理してくれる。

■ 参考

大枠こんなかんじ。

あとは必要な処理を付け足していく感じで。

参考


最後までお読みいただき、ありがとうございました。

ご意見などありましたら@hippohackへDMをお願いいたします。

  • このエントリーをはてなブックマークに追加