[開発進捗6]WordPressで自作テーブルを使う方法

ブログ

[開発進捗1]決算短信XBRLをデータベース化する
[開発進捗2]XBRLファイルを決算データ化する
[開発進捗3]XBRLファイルをBeautifulSoupで解析する
[開発進捗4]決算短信XBRLから決算情報を抽出する
[開発進捗5]XseverのSSH接続,FTP接続,Python実行,MySQL接続

四半期決算を分析するアプリをWordPressで作るの開発進捗の六回目です。

現時点で一旦アプリケーションは完成しています。
ちょっと動きが今一つ所をちょいちょい直したり、そもそもの投資方法自体を再度学習しなおしたりしておりました。

WordPressにおける自作テーブル使用について

まず、とても大事なことなのですが、WordPressは開発用のフレームワークではありません。
その為、自作でテーブルを作成しそれを参照するという行為自体が非推奨です。
アップデートで設定が戻ったり、バックアップの対象にならなかったりすることもあるので、その点は留意したうえでの使用となります。

WPDBという機能

WordPressはデータベースとやり取りするための機能を持っていて、それをwpdbと言います。
wp-includeディレクトリ内のwpdbクラスで処理され、プラグインやテーマのなかでグローバル変数として使用可能で、自作テーブルを含むすべてのテーブルにアクセスが可能です。

WPDBの使い方

とりあえずここではテーブルを自作し、自作プラグイン内で検索する方法を説明します。

自作テーブル作成

WordPressのデータベース(MySql)に接続し、create table文を打つだけなのですが、一点注意が必要です。
wpdbで使用するテーブル名は、接頭に「wp_」が必要です。
「testtable」というテーブルをつくるなら、「wp_testtable」となります。
因みにマジメに自作テーブルにアクセスするプラグインを作る場合、プラグインの中でcreate table文を実行する仕組みにしなければいけません。
ちゃんとやらなきゃいけない方は、以下の本とか参考にして学習するのが良いと思います。

めっちゃ適当ですが、今回は以下の感じでサンプルテーブルを作ります。

wpdbに登録

wp-includes/wp-db.php
内にwpdbで使うテーブルを記述してあげる必要があります。
List of WordPress per-blog tables
というコメントで始まる$tablesのarrayに接頭wp_を抜いた名称でテーブル名を記述します。
因みにWordPressアップデートのタイミングで必ず元に戻ります。
戻ると検索結果を返さなくなるので、アレアレ?っとなりますが、冷静にwp-dbを記述しなおせば元通りです。
※本ブログの非累積業績検索も同様の現象が発生します。出来る限り早期に復旧しますので、ご了承ください。

プラグインの作成

function.phpに書いてお試しする方法もあるのですが、それやるとfunction.phpがどんどん汚れていきますので、自作プラグインを作るのが良いと思います。
因みに以下をfunction.phpにベタ張りしても同じ動きをするはずです。
プラグインは「wp-content\plugins\(プラグイン名)」という感じでディレクトリを作ってphpファイルを書けば意外と簡単に出来ます(雑)
Plugin NameなどのヘッダコメントはWordPressのルールに即した記述なので、お作法に従う必要があるみたいです。
作った後はWordPressの管理画面でプラグインの有効化をすることを忘れずに。

固定ページの作成

スラッグによって上記プラグインの投稿を開くような動きになっていますので、上記のスラッグを持つ固定ページを作ります。
今回の例だと「wpdb_test」という名前のスラッグになります。
作成した固定ページが上記プラグインのフォームで差し変わります。
以下のようになりました。

グリッドを表現するクラスが無い

SQLを発行するところまでは良いのですが、これを表現するグリッドがありません。
wp_list_tableというリスト表示のクラスがあるんですが、これは管理ページでしか使えません。
素人なりに頑張って調べたつもりなんですが、やはり無理でした。グリッドはなかったです。
既存のプラグインも検討したのですが、 変数で結果配列をぶち込んでナイスに描画してくれるとか、むしろSELECT文渡すだけでOKとかそういう便利なものは・・・、なかったです。
そもそもWordPressはそういう用途じゃないですしね・・・。
適当なライセンスフリーなグリッドを使う他なさそうです。
一旦はhandsontableに目をつけまして、これで実装しました。
次回はこのあたりになります。

コメント

タイトルとURLをコピーしました