WordPressfunctions.phpを
プラグイン化
Wordpressのfuncitons.phpの関数を
プラグイン化し進化させる

image: WordPressfunctions.phpをプラグイン化
Toplabo
Convert Functions Into A Plugin

functions.php をスリム化しつつ、カスタム関数を独自プラグインとして管理

 | 2025/04/09

はじ めに

肥大化するfunctions.phpをプラグインに分離し効率よく管理したい
  • どこに何があるのかわからないfunctions

    長くwordpressを運用しているとfunctions.phpがものすごい行数になってしまいます。
    実際に私がそうだたんですが、一度追加するともうその場所がわからなくなったり、同じような機能の関数がいくつも記述してあったりと何とかしたい!!けど面倒という状況でした。

    functions.phpって分割できるんだって!

    これはたぶんCATGptの提案だったんじゃないかな?そんなことができるんだってかんじで導入したと思います。いまでは機能別にフォルダにまとめてあるのでそれぞれの機能を効率よく進化させてます。

    デメリットはない、メリットしかないぞ

    functionsの関数を分離して、何かデメリットはないかと考えたが・・・・ない!何もない、メリットしかない!だったらやるしかないよね爆
    ※実は一点、注意すべきことがあります、それは読み込みの順序。プラグインにするとテーマより先に読み込まれるので、たとえば、add_theme_support(関連はadd_action( 'after_setup_theme', 'shv_setup' );を使ってテーマの後に読み込むように設定する必要があります。

解説

プラグイン化の方法
  • 基本はハロードーリー

    wordpressをインストールすると最初から入っているプラグイン「hello-dolly」を見るとわかる。
    例えばmy-custom-functions.phpという名のプラグインにする場合下記のディレクトリ構成を考える

    wp-content/
    └── plugins/
        └── my-custom-functions/
            ├── my-custom-functions.php

    my-custom-functions.phpの中身は

    <?php
    /**
     * Plugin Name: My Custom Functions
     * Plugin URI:  https://example.com/
     * Description: functions.php から独立したカスタム関数集
     * Version:     1.0
     * Author:      あなたの名前
     * Author URI:  https://example.com/
     * License:     GPL2
     */
    
    // 直接アクセスを防ぐ
    if (!defined('ABSPATH')) {
        exit;
    }
    
    // たとえばモバイル判定関数を記述
    function is_mobile() {
    //なんらかのデバイス判定関数
    }
    
    // 関数をグローバルに利用できるようにする
    //同じ名前の関数がすでに存在しないか確認
    if (!function_exists('is_mobile')) {
        function is_mobile() {
    基本はコメントを入れる、他のテンプレートやテーマと同じ

    ファイルの先頭にコメントでプラグイン名や作者などを記述します。あとは通常のプラグインと同様に進めます

    プラグインを有効化

    WordPress 管理画面にログイン
    「プラグイン」 → 「インストール済みプラグイン」へ移動
    My Custom Functions を探して「有効化」
    以上でプラグインとして読み込まれます。

コード

functions.phpのコードをそのままプラグインへ移行
  • もう準備は済んでいるので、functionsu.phpのコードをそのまま移設可能

    あとは好きに関数を追加すればよいのですが、やみくもに移行するだけでは、これまでと何も変わらないので、機能別、フック別にまとめる。例えば下記のように。

    // 必要なファイルを適当なディレクトリにまとめて読み込む
    require_once plugin_dir_path(__FILE__) . 'inc/setting-themes-2019.php';//初期テンプレートの関数
    require_once plugin_dir_path(__FILE__) . 'inc/init.php';//初期設定
    require_once plugin_dir_path(__FILE__) . 'inc/set-search.php';//検索関連の関数とりまとめ
    //以下同様
    
    //上の場合だとディレクトリ構成は下記のようになります。
    
    wp-content/
    └── plugins/
    	└── my-custom-functions/
    		├── my-custom-functions.php
    		└── inc/ 
    			├── setting-themes-2019.php
    			├── my-custom-functions.php
    			├── set-search.php
    
    //このようにfunctions.php をスリム化しつつ、カスタム関数を独自プラグインとして管理できます。
    //他の関数もこの方法で移行可能です!

拡張

さらに管理画面から設定できるように拡張
  • 管理画面で設定できるようにも可能

    このサイトでも使っているランキングもプラグイン化し各種項目を設定できるようにしました。また、管理画面からだけでなくブラウザからもJSで設定できるようにしてあります。

    https://studio-happyvalley.com/wp/wp-content/uploads/fig1-22.pnghttps://studio-happyvalley.com/wp/wp-content/uploads/fig2-16.png
    自在に進化可能に

    プラグイン化したおかげでランキングツールは、JSでも設定が可能になり、集計から除外するプロパティなどの設定が非常に楽になりました。自分でプラグインを制作すると他の既存のプラグインも自由に調べる事ができていろいろ便利です。次はお問合せフォームを独自プラグインとして開発予定です。

『WordPress.functions.phpをプラグイン化』関連のお薦め

このページで紹介しているプログラムやビジュアルなどご依頼いただければ実装を賜ります。
お問い合わせはこちら