classでWordPressプラグインを作る

基本的にネット情報だと、functionだけでプラグインを作る。
それを追加するには、下記のように作ったfunctionの名前を登録する。

add_action('the_content', '【作ったfunctionの名前】');

この作ったfunction処理の名前、被ったらエラーが起きる

流用しようというとき、イチイチfunction名を変えるのが、めんどくさい。
最低限書き換えるだけで、済ませたい…

プラグイン毎にfunction名考えたくない

そんな名付け無精同志は、是非classでプラグインを作ることをオススメします。

大概functionだけで作れてしまうから、あまり情報がないけども、実はclassでも作れる。
基本の型として、下記に記載。最低限、コレで大丈夫。

class WordPress_plugin_sample {
    static $package = "Wordpress-plugin-sample";
	static $version = "1.0.0";
	static $title   = "Wordpress plugin sample";

    // 呼び出し対象
    public static function register_hooks() {
        // wordpressに処理を追加
        add_action('admin_menu', array(__CLASS__, 'register_admin_hooks'));
        add_action('the_content', array(__CLASS__, 'settings_page'));
    }

    // 管理画面のメニューを追加
    public static function register_admin_hooks() {
        add_options_page(
            __("Configure ".self::$title, self::$package), // page title.
            __(self::$title, self::$package),              // menu title.
            'manage_options',                              // priv/capability
            self::$package.'-settings',                    // slug
		array(__CLASS__, 'settings_page'));
    }

    // 追加される管理ページ
    public static function settings_page($text) {
?>
        <link rel='stylesheet' href='<?php echo plugins_url( 'css.css', __FILE__ ); ?>' type='text/css' media='all' />
        <script type="text/javascript" src='<?php echo plugins_url( 'js.js', __FILE__ ); ?>'></script>
        <form method="post" action="" id="form" name="form0">
        <h2><?php echo self::$title; ?></h2>
などなど管理画面に追加したい項目
        </form>
<?php
    }

    // 追加される処理
    function add_action($text){
        return $text.'編集後';
    }
}
Wordpress_plugin_sample::register_hooks();

class名部分さえ変えてしまえば、function名は同じで問題ない。

例えば下記の部分は、そのまま使えばOK。

add_action('admin_menu', array(__CLASS__, 'register_admin_hooks'));

勝手に呼び出し元class名を指定してくれるからね。

管理メニューの種類

『add_options_page』という部分、書き換えれば管理画面のメニューの位置を変更出来る。

  • add_dashboard_page():ダッシュボード
  • add_posts_page():投稿
  • add_media_page():メディア
  • add_pages_page():固定ページ
  • add_comments_page():コメント
  • add_theme_page():外観(テーマ)
  • add_plugins_page():プラグイン
  • add_users_page():ユーザ
  • add_management_page():ツール
  • add_options_page():設定
add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function);

のようにadd_submenu_pageで追加する方法もあるので、好きな方を使えばよろしいかと。

コメント

タイトルとURLをコピーしました