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]

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

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

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');

だけです。

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

Amazon GameLiftの恐怖

Amazonからいかなるメールが突然来ました。

Greetings from Amazon Web Services,

This e-mail confirms that your latest billing statement, for the account ending in ****6128, is available on the AWS web site. Your account will be charged the following:

Total: $32.95

You can see a complete break down of all charges on the Billing & Cost Management page located here:

https://console.aws.amazon.com/billing/home#/bill?statementTimePeriod=1538352000

To protect your privacy, we can only communicate account information to the e-mail address on file for your account.

Thank you for using Amazon Web Services.

Sincerely,

Amazon Web Services

To learn more about managing your AWS costs with Cost Allocation and Tagging, visit http://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html

This message was produced and distributed by Amazon Web Services, Inc. and affiliates, 410 Terry Ave. North, Seattle, WA 98109-5210.

AWS will not be bound by, and specifically objects to, any term, condition or other provision which is different from or in addition to the provisions of the AWS Customer Agreement or AWS Enterprise Agreement between AWS and you (whether or not it would materially alter such AWS Customer Agreement or AWS Enterprise Agreement) and which is submitted in any order, receipt, acceptance, confirmation, correspondence or otherwise, unless AWS specifically agrees to such provision in a written instrument signed by AWS.

The AWS Customer Agreement was updated on May 14, 2018. You can see more information about these changes at https://aws.amazon.com/agreement/recent-changes/.

なに!32ドル92セント払え!何のこっちゃ!と思い、詳細を見てみると「GameLift」で32.92利用になっとる!ゲーム のサンプルで無料の筈が何故!

それの課金が!やられた!って感じでググってみたら案の定他のひとも悲惨な方がいらっしゃった。

チュートリアルを途中まで進めただけで数万円の支払が発生したAWS

 

あわてて僕もフリートを削除しました。

Amazon GameLift 入門 #5 フリートの削除

 

まあ、無料をうたうんだったらサンプルのダウンロードと通信も無料にしろよ!

高い勉強代になっちゃった!気をつけよう。

サポートに無料が課金されている旨を伝えたところ返金をする旨の連絡をいただきました。サンプルをビルドすると無料ではなく有料になる旨を記載すべきと進言しましたがどうなるかな?

少なくともサンプルをステップにしたがって進めると無料ではなくなるのでそれは明記すべきだと思います。

Sequenceノードの誤解

誤解してたのだけど、Then0へ処理が走って、Then0の処理が終わったらThen1の処理をする訳ではないので気をつけないと変な結果になる。

Then0の処理が走って、次にThen1の処理が走るって事。Then0の処理が終わったらThen1の処理が走る訳じゃないよ。

Then0の処理が終わってなくとも走ればThen1の処理が始まっちゃうよ。

フォントと段落を設定する

まず、外部*.cssを読み込ませてフォントを設定させる

以下setfont.cssファイル

/*タイトル用*/

p.fonttitle{font-size:36px;font-family:monospace;font-weight:600;line-height: 200%;}

/*小見出し用*/

p.fontmidasi{font-size:24px;font-family:monospace;font-weight:600;line-height: 200%;}

/*本文用*/

p.fontname{font-size:12px;font-family:monospace;font-weight:400;line-height: 200%;}

/*脚注用*/

p.fontnotes{font-size:10px;font-family:monospace;font-weight:600;color:#ff0000;line-height: 200%;}

でHTMLで読む

<html>
  <head>
    <link rel="stylesheet" href="setfont.css" type="text/css">
  </head>
<body>
  <p class="fonttitle">タイトル</p>
  <p class="fontmidasi">見出し</p>
  <p class="fontname">本文</p>
  <p class="fontnotes">脚注</p>
</body>
</html>

こんな感じ

CSS辞書

タイトル

見出し

本文

脚注

パッケージのアンインストール

インストールしたパッケージのアンインストールは簡単

パッケージのみアンインストール

apt-get remove パッケージ名

設定ファイルごとアンインストール

apt-get purge パッケージ名

AWSでWordPressのプラグインのインストール・アップデート

AWSで運用しているとWordPressのプラグインがインストール・アップデートできないって現象に見舞われるんですが、これはどうやら所有権の問題のようなのでその対処法を記載

まず、wp-config.phpに以下を追記。

define('FS_METHOD','direct');

これはFTPでエラーというのを防ぐためのもの。

続いてプラグインインストール・アップデート時のみwordpressディレクトリの所有権をrootに変更する。

chown -R root:root /home/wp

終わったら元に戻します。

chown -R user:user /home/wp

戻しておかないとWINSCPなどでアクセスできなくなっちゃいます。

超便利なWebminをAWSでも使う

まず、Webminをセットアップします。

で、デフォルトでは外部からアクセスできないので設定を変更します。rootでログインして、

vi /etc/webmin/miniserv.conf

を編集します。

最後の行の

allow=127.0.0.1

#allow=127.0.0.1

にして再起動

systemctl restart webmin

でアクセスできます。

アクセスしたら英語になってんので日本語にしましょ。

ここの設定をJapaneseに変えれば日本語になります。