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

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

WordPressの管理画面にrootでログインして「プラグイン」>「インストール済みプラグイン」で表示されているプラグインを「showDB.php」として作成します。

【解説】

プラグインはインストール済みプラグインに表示される概要説明を作る場所と一回だけ実行されるコンストラクタという場所と実行される関数部で構成されます。今回試作するプラグインはwordpressのDBを全て読み込んで表示するだけのプラグインです。

プラグインは

/wordpress/wp-content/plugins

にディレクトリを作ってshowDB.phpを入れると表示されます。

↑こんな感じ

【プラグイン全体のコード】

<?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からテーブルを取り出しておく
        echo <<<TABLE
        <h1>Show WordPress All Table<h1>
        <hr width="98%">
        <table width="98%" cellpadding="10" cellspacing="4" border="0" bgcolor="#888888">
TABLE;
        for ($i=0;$i<count($tables);$i++){//カウントアップしながら配列を分解
            echo <<<TABLE
            <tr><td bgcolor="#ffffff">{$i}</td><td bgcolor="#ffffff">{$tables[$i]->Tables_in_wordpress}</td></tr>
TABLE;
        }
        echo <<<TABLE
        </table>
TABLE;
    }
}

【各部解説】

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

↑がインストール済みプラグインで表示される場所

//クラスを作る
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からテーブルを取り出しておく
        echo <<<TABLE
        <h1>Show WordPress All Table<h1>
        <hr width="98%">
        <table width="98%" cellpadding="10" cellspacing="4" border="0" bgcolor="#888888">
TABLE;
        for ($i=0;$i<count($tables);$i++){//カウントアップしながら配列を分解
            echo <<<TABLE
            <tr><td bgcolor="#ffffff">{$i}</td><td bgcolor="#ffffff">{$tables[$i]->Tables_in_wordpress}</td></tr>
TABLE;
        }
        echo <<<TABLE
        </table>
TABLE;
    }
}

↑が実際に表示する関数。$thisからtablesオブジェクトを取り出して配列に格納。配列分だけloopしてカウントアップしている。->Tables_in_wordpressはvar_dump()で配列の中身をみたらテーブル名はTables_in_wordpressに格納されていたから。

↑こんな感じで一覧で所得できるんで応用すればいろいろ出来ます。

WordPressショートコードを作ってみる:第二回

【第二回】WordPressの機能を追加するものにショートコードがありますが今回はこのショートコードの作り方を解説します。

【まとめ】

WordPressの記事はwp_postsにあり、

post_typeがpostまたはrevisionのものが対象である。

wp_postsを読むにはMySqlへログインする必要があるが、

global $wpdb;
//だけでログインできてしまうという超簡単仕様。

以上を踏まえてショートコードを書いてみます。

//関数名はpostCountで引数も渡せますので渡せるようにします。
//[POSTCOUNT posts post_content post revision]
//という感じで引数がない場合も作っておきます
function postCount($target){//引数はarrayで受け取る
    if(count($target)==4){//引数が4送られたら
        $table_name= $target[0];
        $count_row = $target[1];
        $target1   = $target[2];
        $target2   = $target[3];
    }else{//4以外ならデフォルト
        $table_name= "posts";
        $count_row = "post_content";
        $target1   = "post";
        $target2   = "revision";
    }
    //DBに接続;インスタンスを呼ぶ
    global $wpdb;
    //tableをSELECT
    $countrow=$wpdb->get_results( "SELECT $count_row FROM $table_name WHERE post_type='$target1' OR post_type='$target2' ",OBJECT);
    //$countrowをカウントしていくつあるか
    return "現在、記事は".count($countrow)."件あります。";
}
add_shortcode('POSTCOUNT','postCount');
//ページに書くコード[POSTCOUT]呼ぶfunctionはpostCount

という感じで追記してみると記事数が得られます。

ヒント!)SELECT $count_row FROM $table_name WHERE post_type=’$target1′ OR post_type=’$target2’はsql命令文です。post_type=’$target1’の変数を”で囲っているのは’’内がstringであるからです。

新しい投稿ページに以下を書き込みます。

[POSTCOUNT wp_posts post_content post revision]

すると以下のように表示されます。

現在、記事は321件あります。

WordPressショートコードを作ってみる:第一回

【第一回】WordPressの機能を追加するものにショートコードがありますが今回はこのショートコードの作り方を解説します。

WordPressの管理画面にrootでログインして「外観」>「テーマの編集」>「テーマのための関数」をセレクトします。

この<?からはじまるページがWordPressで使えるカスタム関数(ショートコードなど)を書き込めるシートになります。

今回はこのシートの最後尾に記事数をカウントするショートコードを追加する手順を解説します。

【手順】

①WordPressの記事はどこに格納されているか調べる

WordPressの記事はMySqlデータベースのwp_postsに格納されています。
またこのDBのレコードのpost_typeがpostまたはrevisionのものが記事で
メディアはattachmentになるようです。

なのでwp_postsをオブジェクトとして読み込んで、
post_typeがpostまたはrevisionのものをカウントすれば記事の数が解ります。

②WordPressのMySqlデータベースにアクセスする方法を知る

WordPressでMySqlにログインするのは簡単です。

global $wpdb;

これだけでMySqlにログインできてしまいます。

関数リファレンス/wpdb Class

が、WordPressから見えるのは

/wordpress/wp-includes/wp-db.php

に記載されている

var $tables = array( 'posts', 'comments', 'links', 'options', 'postmeta',
'terms', 'term_taxonomy', 'term_relationships', 'termmeta', 'commentmeta');

だけです。

と、ここまで解ったらあとはコードを書くだけです。

PHPマニュアル

簡易的にPHPスクリプトにセキュリティとしてパスワードをかける実装

<?php
//passwdを自分なりのpasswdにするんだよ
$pass = "passwd";
if(isset($_POST['pass'])&&$_POST['pass']==$pass){
        //postされてパスワードが$passと同じならばphpinfo()を出力
        phpinfo();
}else if(isset($_POST['pass'])&&$_POST['pass']!=$pass){
        //postされたがパスワードが違った場合はメッセージを表示
        echo ("Access is prohibited.");
}else{
        //postがされていない時はパスワードの入力フォームを表示
        echo ("<form method=\"POST\" action=\" $script_php \">\n
              Input Password<br><br>\n
              Password:<input type=\"password\" name=\"pass\">\n
              <input type=\"submit\" value=\"Input\">\n
        ");
}
?>

PHPマニュアル

つまったら検索