WordPressプラグインを作ってみる:第三回

【第三回】WordPressの機能を追加するものにプラグインがありますが今回はこのプラグインの作り方を解説します。

第二回ではテーブルを指定してカラムを読み込むショートコードを解説しましたが、第一回でプラグインに実装したテーブルを全て読み込むコードにカラムを読み込む実装をしようかと思います。

【まず実装コード】

<?php
/*
Plugin Name: Show WordPress DataBase
Plugin URI: https://wspri.dip.jp/?p=155
Description: wordpress.*データベースを読んで一覧を表示するプラグイン
Author: jack.Amano
Version: 0.0
Author URI:https://wspri.dip.jp
*/

//オブジェクトを作成
new showtables;

//クラスを作る
class showtables{
    //コンストラクタ
    function __construct(){
        global $wpdb;//インスタンスを呼んでログイン
        $this->tables=$wpdb->get_results("SHOW TABLES FROM wordpress ");//テーブルを呼び出して$thisの中に格納しとく
        add_action('admin_menu', array($this, 'add_admin'));//管理者メニューに追加する準備
    }
    //メニューを追加する関数
    function add_admin(){
        //level_8から10が管理者
        add_menu_page('DB一覧表示','DB一覧表示','level_9', __FILE__, array($this,'show_DB'));
    }
    //DBを表示する関数
    function show_DB(){
        $tables=$this->tables;//$thisからテーブルを取り出しておく
        global $wpdb;//インスタンスを呼んで再びログイン
        echo <<<TITLE
        <h1>Show WordPress All Table<h1>
        <hr width="98%">
        <ol>
TITLE;
        for ($i=0;$i<count($tables);$i++){//カウントアップしながら配列を分解
            $tablename=$tables[$i]->Tables_in_wordpress;
            echo <<<ORITATAMI
            <div onclick="obj=document.getElementById('menu{$i}').style; obj.display=(obj.display=='none')?'block':'none';">
            <h5><li type="1"><a style="cursor:pointer;">{$tablename}</a></li></h5>
            </div>
            <div id="menu{$i}" style="display:none;clear:both;">
            <ol>
ORITATAMI;
            $colum_search = $wpdb->get_results("SHOW COLUMNS FROM $tablename ");
            for($c=0;$c<count($colum_search);$c++){
                echo "<div><h6><li type='circle'>".$colum_search[$c]->Field."</li></h6></div>";
            }
            echo "</ol></div>";
        }
        echo "</ol>";
    }
}

↑という感じで実装しました。

↑こんな感じに見えます。テーブルの中身(カラム)は折りたたんでいるのでテーブル名をクリックするとカラム一覧が表示されます。

【解説】

そのまま表示すると膨大な行数になっちゃうのでテーブル名に折りたたみました。なのでテーブル名をクリックするとそのテーブルのカラム一覧が表示されます。また、コンストラクタでインスタンスを呼ばなくても関数の中でどうせ呼ぶんだからいいかと思いますがここでは修正しませんでした。( ̄∀ ̄)

    for ($i=0;$i<count($tables);$i++){//カウントアップしながら配列を分解
        $tablename=$tables[$i]->Tables_in_wordpress;
        echo <<<ORITATAMI
        <div onclick="obj=document.getElementById('menu{$i}').style; obj.display=(obj.display=='none')?'block':'none';">
        <h5><li type="1"><a style="cursor:pointer;">{$tablename}</a></li></h5>
        </div>
        <div id="menu{$i}" style="display:none;clear:both;">
        <ol>
ORITATAMI;
        $colum_search = $wpdb->get_results("SHOW COLUMNS FROM $tablename ");//テーブルのloop中にカラムのオブジェクトを受け取る
            for($c=0;$c<count($colum_search);$c++){//テーブルのカラムの分ループして書き出す
                echo "<div><h6><li type='circle'>".$colum_search[$c]->Field."</li></h6></div>";
            }
            echo "</ol></div>";
    }
    echo "</ol>";
}

↑折りたたみ部位。CSSの折りたたみを使っています。

まず、テーブル名をループしながら分解して書き出しています。またその際にカラムのオブジェクトも受け取って分解して書き出しています。

すごい簡単でしたね。これでテーブル一覧とそのカラム一覧が受け取れました。あとは応用するといろんな事ができます。まあ、プラグインでphpMyAdminみたいなこともできますね。(工数かかるけど…)

当然ですがカラム名をクリックすると値が見れるという実装も出来ますよ。またそれをCSVに書き出すってのも出来ます。(//∇//)

取りあえずこのプラグインをインストールして動作を見てみる

リンクをクリックするとこのプラグインをダウンロードできます。ダウンロードしたら[プラグイン]>[新規追加]>[プラグインのアップロード]>showDB.zipを選択>[今すぐインストール]でインストールできますのでインストールしたら[有効にする]にしてください。

左メニューにDB一覧表示があるはずです。動かしてみましょう。

コメントを残す

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