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

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

第三回ではテーブルとカラムを読み込むことが出来て表示されるまでを解説しましたので第四回は表示したテーブルとカラムの情報を受け取る解説をします。

【必要な事項】

①テーブル名とカラム名を選択できるようにする

②選択したテーブル名とカラムをサーバーに送信する

③サーバーが受け取る

以上が動作に必要なものになります。

まず、表示されたテーブル名を選択できるようにします。これはテーブル名にラジオボタンをつけてPOSTするようにします。

次に表示されるカラム名にチェックボックスを付け、こちらは配列で送るようにします。

        global $wpdb;//インスタンスを呼んでログイン
        $tables=$wpdb->get_results("SHOW TABLES FROM wordpress ");

        echo <<<TITLE
        <h1>Show WordPress All Tables</h1>
        テーブル選択のラジオボタンをオンにして、そのテーブルのカラムを選択します。確認できたら[Set Form]ボタンを押してください。<br>
        テーブルまたはカラム名だけ送信することはできません。ラジオボタンがオフになっているテーブルのカラムを送信するとエラーになります。
        <hr width="98%">
        <form method="post" name="form1" action="" >
TITLE;

        for ($i=0;$i<count($tables);$i++){//カウントアップしながら配列を分解
            $tablename[$i]=$tables[$i]->Tables_in_wordpress;

            echo <<<ORITATAMI
            <div onclick="obj=document.getElementById('menu{$i}').style; obj.display=(obj.display=='none')?'block':'none';">
            <h2><input type="radio" name="table_name" value="{$tablename[$i]}">{$tablename[$i]}</h2>
            </div>
            <div id="menu{$i}" style="display:none;clear:both;">
ORITATAMI;

            $colum_search = $wpdb->get_results("SHOW COLUMNS FROM $tablename[$i] ");
            for($c=0;$c<count($colum_search);$c++){
                echo <<<ORITATAMI
                <div><h3>
                <input type="checkbox" name="colum_name[]" value="{$colum_search[$c]->Field}">{$colum_search[$c]->Field}</h3></div>
ORITATAMI;
            }
            echo "</div>";
        }
        echo "<input type='submit' value='Set Form'></form>";

チェックボックスのnameの設定を見てほしいんですが、colum_name[]になっています。これはcolum_nameは配列で送るというフォームの設定です。

これで送信側はOKです。次は受け取る側ですがテーブル名とカラム名は一緒に送られてくるという条件にします。

        if(isset($_POST['table_name']) && isset($_POST['colum_name'])){
            $table_mono=$_POST['table_name'];
            $colum_array=$_POST['colum_name'];
            echo <<<FORM
            <h1>Show WordPress Table & Columns</h1>
            テーブルのカラムが送信されないとカラムの内容を読み込めません。ここに表示されているテーブル名のカラムか確認してから[Read Table & Columns]ボタンを押してください。
            <hr width="98%">
            <form method="post" action="" >
            <h2>TABLE NAME:<input type="text" name="post_tablename" value="{$table_mono}" style='font-size:20px;font-weight:900;'></h2>
FORM;

            for ($i=0;$i<count($colum_array);$i++){
                $c=$i+1;
                echo "<h4>&raquo; COLUMN{$c}:<input type='text' name='post_columname[]' value='{$colum_array[$i]}'></h4>";
            }
            echo <<<FORM
            <input type="submit" value="Read Table & Columns">
            </form>
FORM;
            $this->readDB();//選びなおせるようにしますね

 

POSTされてきたテーブル名とカラム名はこうフォームにセットされます。カラム名は配列で送られてくるので配列分処理しないとダメです。$this->readDB()はいちいち書くのが面倒なのでテーブルとカラムを選択するフォームを外部関数化したものを呼び出しています。

    private function readDB(){
        global $wpdb;//インスタンスを呼んでログイン
        $tables=$wpdb->get_results("SHOW TABLES FROM wordpress ");
        echo <<<TITLE
        <h1>Show WordPress All Tables</h1>
        テーブル選択のラジオボタンをオンにして、そのテーブルのカラムを選択します。確認できたら[Set Form]ボタンを押してください。<br>
        テーブルまたはカラム名だけ送信することはできません。ラジオボタンがオフになっているテーブルのカラムを送信するとエラーになります。
        <hr width="98%">
        <form method="post" name="form1" action="" >
TITLE;

        for ($i=0;$i<count($tables);$i++){//カウントアップしながら配列を分解
            $tablename[$i]=$tables[$i]->Tables_in_wordpress;
            echo <<<ORITATAMI
            <div onclick="obj=document.getElementById('menu{$i}').style; obj.display=(obj.display=='none')?'block':'none';">
            <h2><input type="radio" name="table_name" value="{$tablename[$i]}">{$tablename[$i]}</h2>
            </div>
            <div id="menu{$i}" style="display:none;clear:both;">
ORITATAMI;

            $colum_search = $wpdb->get_results("SHOW COLUMNS FROM $tablename[$i] ");
            for($c=0;$c<count($colum_search);$c++){
                echo <<<ORITATAMI
                <div>
                <h3>
                <input type="checkbox" name="colum_name[]" value="{$colum_search[$c]->Field}">{$colum_search[$c]->Field}</h3></div>
ORITATAMI;
            }
            echo "</div>";
        }
        echo "<input type='submit' value='Set Form'></form>";
    }

 

こんな感じです。関数化しておくと便利ですね。

ラジオボタンでテーブルを選択すると折りたたみが開いてカラムを選択できます。で[Set Form]ボタンを押すとフォームにPOSTされます。

これでテーブルとカラム名を配列でサーバーに遅れました。次回は送られたテーブル名とカラム名配列で実際にデータベースの中身を表示してみます。

 

コメントを残す

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