WordPress:プラグインの作成方法とスニペットをプラグイン化して管理する方法

  • Posted on
  • Category : WordPress
WordPress:プラグインの作成方法とスニペットをプラグイン化して管理する方法

プラグインの作成とか開発って聞くと凄く難しそうなイメージがあったんですが、実際にやってみると簡易的なものであればかなり手軽に作成できたので、触りだけですが備忘録兼ねて紹介します。また、いろいろとカスタマイズしている場合にカオスになりがちなfunctions.phpですが、それをプラグインを使って少しでも管理しやすくする方法も併せて紹介します。

WordPress:プラグインの作成方法とスニペットをプラグイン化して管理する方法 目次

  1. プラグインってなに?
  2. プラグインの作成方法
  3. スニペット管理用のプラグインを作成する
    1. 全てひとつのPHPファイルに記述してプラグイン化する
    2. 複数のスニペットをまとめてプラグイン化する

1. プラグインってなに?

What is plugins?

そもそもプラグインとは…

プラグインは、WordPressの機能を拡張するためのツールです。
WordPressのコアは、柔軟性を保つため、不必要なコードでふくれあがってしまわないように設計されています。ユーザーそれぞれが特定のニーズに合ったプラグインを利用して、カスタム機能を取り入れられるように作られています。

プラグイン – WordPress Codex 日本語版

上記のようにCodexにも載っていますが、要は “WordPressのコアプログラムをいじらなくても(知識がそんなになくても)、サイトの見栄えを変えたり、機能を追加・強化したりすることが簡単にできるもの” です。
日本語版のデフォルトではスパム対策してくれる「Akismet」やマルチバイト文字の取り扱いに関する不具合を修正してくれる「WP Multibyte Patch」などが予め用意されており、その他有名なものだと、お問い合わせフォームを手軽に実装できる「Contact Form 7」やページナビゲーションを簡単に実装・拡張できる「WP-PageNavi」なども全てプラグインとなります。

目次へ

2. プラグインの作成方法

先程紹介したようなプラグインを作ってみたい場合はある程度の知識がもちろん必要になるのですが、WordPressのプラグイン自体はとても簡単に作成できます。(少なくとも僕は予想以上に簡単にできたのでびっくりしました)
Codexにも記載されていますが、下記を記述したPHPファイルを「/wp-content/plugin/」に入れるだけでプラグインとして動きます。

<?php
/*
Plugin Name: (プラグインの名前)
Plugin URI: (プラグインの説明と更新を示すページの URI)
Description: (プラグインの短い説明)
Version: (プラグインのバージョン番号。例: 1.0)
Author: (プラグイン作者の名前)
Author URI: (プラグイン作者の URI)
License: (ライセンス名の「スラッグ」 例: GPL2)
*/

// ここにコードを記述

?>

上記のようなプラグイン情報をPHPファイルに記述して、あとはコードを書けばプラグインとして機能してくれます。
ちなみにプラグインとして認識するのに最低限必要なのはPlugin Nameだけなので、特に公開する予定もなく完全に自分用のプラグインとかであれば他の部分は省いても問題ないようです。

以下、プラグイン作成時に参考にさせてもらったサイトやスライドになります。
今回のエントリーはプラグイン作成方法といっても本当に触り部分だけなので、もっと本格的なものを作りたいとか、もっと詳しく知りたい場合はひと通り見てみてください。
特に「webOpixel」さんではプラグインの作成方法が丁寧に説明されており、中級編としてデータベース(テーブル)を利用する方法もまとめられていて参考になります。

目次へ

3. スニペット管理用のプラグインを作成する

以前からカスタマイズすればする程カオス化していくfunctions.phpをどうにかしたいと思っておりいろいろと調べたところ、いろいろと方法がある中(他の方法は忘れましたが…)でプラグイン化するのが個人的に一番管理もしやすく手軽でいいなと思い実装してみました。
今回プラグインの作成方法を調べた大きな理由でもあります。

下記はどちらも毎回functions.phpへ書いているようなことをプラグイン化して手間を省こうというものなのですが、ひとつのファイルで完結させる方法とスニペット毎に分けて管理しやすくする方法になります。

3-1. 全てひとつのPHPファイルに記述してプラグイン化する

先程紹介したベースとなるPHPの「ここにコードを記述」部分にスニペットを全て記述してプラグイン化する方法です。
例えば、必ずアイキャッチを利用するのであればadd_theme_support( ‘post-thumbnails’ );を書いておいたり、ログイン画面のロゴ変更やアップデート通知を消すなどの管理画面に関連するものなどで必ず書いていることがあればそれらを書いておき、あとはサイト制作時にこのプラグインを有効化するだけで適応されるので、毎回functions.phpに記述する手間を省けます。
また、プラグイン化することによって、テーマを変更した時などもわざわざfunctions.phpからfunctions.phpへコピペしたりする必要もなくなります。

今回はサンプルとして管理画面周りで毎回記述するようなものをプラグイン化したものを作ってみました。
プラグイン名は管理画面のカスタマイズなのでMy Admin Settingにし、ファイル名はmy-admin-setting.phpにしました。

ちなみに、今回サンプルで記述している管理画面周りのカスタマイズはこれ以外にも沢山あり、以前エントリーにまとめたので興味が有る方はこちらを参考にしてみてください。

my-admin-setting.php

<?php
/*
Plugin Name: My Admin Setting
Description: 管理画面カスタマイズ
Version: 1.0
*/



// ログイン画面のロゴを変更
function custom_login_logo() {
	echo '<style type="text/css">h1 a { background: url('.get_bloginfo('template_directory').'/images/login-logo.png) no-repeat center center !important; }</style>';
}
add_action('login_head', 'custom_login_logo');



// 管理バーの項目非表示
add_action('wp_before_admin_bar_render', 'hide_before_admin_bar_render');
function hide_before_admin_bar_render() {
	global $wp_admin_bar;
	$wp_admin_bar->remove_menu( 'wp-logo' );
	$wp_admin_bar->remove_menu( 'updates' );
}



// 各アップデート通知の非表示
add_filter('pre_site_transient_update_core', '__return_zero');
remove_action('wp_version_check', 'wp_version_check');
remove_action('admin_init', '_maybe_update_core');

add_action('admin_menu', 'remove_counts');
function remove_counts(){
	global $menu,$submenu;
	$menu[65][0] = 'プラグイン';
	$submenu['index.php'][10][0] = '更新';
}



// ダッシュボードのウィジェットを非表示
function remove_dashboard_widgets() {
	global $wp_meta_boxes;
	unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);  // 被リンク
	unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);         // プラグイン
	unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);           // ブログ
	unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);         // フォーラム
}
add_action('wp_dashboard_setup', 'remove_dashboard_widgets');

?>
プラグイン一覧に追加される

上記ソースを「/wp-content/plugin/」にアップして管理画面を確認すると、画像のようにプラグイン一覧に表示されます。
あとはこのプラグインを有効化すれば上記の各スニペットが適応されます。

3-2. 複数のスニペットをまとめてプラグイン化する

上記方法でテーマ内にあるfunctions.phpはスッキリしたし、テーマ変更時にわざわざやっていたコピペの面倒などもなくなったと思うのですが、プラグイン化したスニペットが沢山あった場合に結局見辛くカオス化したファイルとなってしまいます…。
先ほどのサンプル程度の数ならパッと見でわかりますが、例えば20個のスニペットを入れたりとかすると、パッと見ではどんなスニペット書いているかは分かり辛いです。
これから紹介する方法は、スニペットをプラグイン化したものを更に管理しやすい状態にする方法になります。

まず「/wp-content/plugin/」に任意の名前でディレクトリを作成します。
今回はサンプルで先ほど使用した名前を用いてmy-admin-settingというディレクトリで作成し、次にそのディレクトリ内にmy-admin-setting.phpというファイルを作成して以下を記述します。

※ディレクトリ名やファイル名は任意で変更できますので、ご自身でわかりやすいものに変更してください。

my-admin-setting.php

<?php
/*
Plugin Name: My Admin Setting
Description: 管理画面カスタマイズ
Version: 1.0
*/

$hack_dir = trailingslashit(dirname(__FILE__)) . 'snippets/';
opendir($hack_dir);
while(($ent = readdir()) !== false) {
	if(!is_dir($ent) && strtolower(substr($ent,-4)) == ".php") {
		include_once($hack_dir.$ent);
	}
}
closedir();

?>

上記を記述後、次に先ほど作成したディレクトリ内にサブディレクトリを作成します。
今回はサンプルとしてsnippetsという名前でサブディレクトリを作成しています。
ディレクトリ名を変更する場合は、上記ソースの赤文字で表示している箇所を変更してください。

ここまでやって管理画面でプラグインを有効化すると「/wp-content/plugin/my-admin-setting/snippets」内にあるPHPファイルが全て読み込まれるようになります。
例えば、ログイン画面のロゴを変更するものを記述したものcustom-login-logo.phpに、ダッシュボードのウィジェットを非表示にするものをremove-dashboard-widgets.phpにというように、各スニペットをひとつずつPHPファイルに記述してアップすればそれらが全て適応されるようになります。

複数のスニペットをまとめてプラグイン化する

他にも追加したくなった場合は同様にPHPファイルを作成してsnippetsへアップし、逆にもう必要ないと思ったらsnippetsから該当のPHPファイルを消すだけです。

この方法でスニペットを管理するようにすれば、例えば予め30個ぐらいのスニペットを詰め込んだベースみたいなものを用意しておいてプラグインを有効化。
あとは、そのサイトに必要なければ該当ファイルをディレクトリから消していくだけみたいな使い方ができます。

もちろんこれが便利なのかどうかは案件内容や制作者によると思いますが、個人的には凄く良いなと感じて、これからこの方法でスニペットを管理していこうかなと思ったので備忘録兼ねて紹介させてもらいました。
この方法は以下のエントリーで教えてもらいました。

目次へ

Back to Top

WordPress:プラグインの作成方法とスニペットをプラグイン化して管理する方法

WordPress:プラグインの作成方法とスニペットをプラグイン化して管理する方法

/ WordPress

NxWorld

Sorry... doesn't support your browser

To get the best possible experience using our site we recommend that you upgrade to a modern web browser.NxWorldではご利用中のブラウザサポートはしていません。
Internet Explorerのアップグレード行う、もしくはその他のブラウザを使用しての閲覧をお願いします。