いや、本当にびっくりしました。これから「WP-CLIのコマンド作る」というが選択肢に入ってくると色々と手数を減らせそうでわくわくしてますよ。
受託でWordPressのサイトの構築していると、エンドさんの管理しているDBから何らかの形(CSVとか)でエクスポートしてポストするということが結構な頻度であります。
まあ、一回やって終わりならそういったインポート系のプラグインを利用するなどで対応をすることが多いですが、毎日更新されるようなものだと毎度管理画面を開くというわけにも行きません。
そうでなくともカスタムフィールドやタクソノミーの多いカスタム投稿などは、管理画面で変換の設定をコリコリやるのもなかなかの労力です。さらに元データーから整形して‥‥とかになると、
「PHPでCSVパースしてarray作ってwp_insert_postしたらええやないかーい!」
と思うわけです。
逆にcronで動かすようになると、WordPressのDB構造を見て、それに合わせてSQL書いて‥‥となると
「WordPressの関数使えたら万事解決やないかーい!」
とも思うわけです。
で、それを万事解決してくれるのがWP-CLIです!
WP-CLIでは豊富なコマンド群を利用することで、WordPressのインストールから、プラグイン・テーマの管理、投稿の管理などなどなどなど様々なことが行なえますが、自作したコマンドを動かすこともできます。
で、今回コマンドを作成してみたらあまりにもサクサクーッと進んだので、感動のあまりエントリーを書いています。
やり方はCommands Cookbook – WP-CLIを見ればすぐできるのですが、ここでは更に端折って手順をまとめてみます(はしょって書いているので抜けがあるのを前提に参照してください)
※ WP_CLIはすでにインストール済みの想定です
コマンドを作る
https://make.wordpress.org/cli/handbook/commands-cookbook/#annotating-with-phpdoc
↑のサンプルがわかりやすいです。抜粋してみました。
<?php /** * Implements example command. */ // ↓WP_CLI_Commandを継承したクラス名をつける class Example_Command extends WP_CLI_Command { /** * 略 */ // ↓ここに関数を作成 function hello( $args, $assoc_args ) { // ここにゴリゴリとやりたいことを書く list( $name ) = $args; // Print the message with type $type = $assoc_args['type']; WP_CLI::$type( "Hello, $name!" ); } } // ↓コマンド名と作成したクラスを関連付ける WP_CLI::add_command( 'example', 'Example_Command' );
で、この中ではWordPressの関数などは利用できる状態になっているので、functions.phpを書くような感覚でPHP書いてしまえばOKです。例えばDB直接参照したいときは、
global $wpdb;
すれば同じようにDBを扱えますし、
wp_insert_post
などなどのWordPressの関数類も使い放題です。
コマンドを読み込ませる
これは方法が何通りかありますが、今回私は、WordPressをインストールしているディレクトリに「wp-cli.yml」ファイルを置き
require: - /path/to/command/my_command.php
と記述しました。これで、対象のWP-CLIが起動するときにコマンドを定義したファイルを読み込んでくれます。そこまでできれば、今回の例だと
wp example hello maepon
で動作してくれます。
別に引数無しでデータ処理のみガリガリさせることも当然、可能です。
WP-CLIのコマンドを作るメリット
一番は、データ処理など必要なプログラムのみを書くだけになるので、非常に見通りが良いPHPが書きやすいということではないでしょうか。UIのための記述などが必要ないので、例えばデータ処理なら、そのロジックだけを書いてしまえば良いので、UIのためにHTMLを書いたり、テンプレートを用意する必要もありません。このあたり、サイト固有の機能などを作るときに必要最小限の工数で実現できて良いと思います。
ともかく
「思ってるよりサクッとできたわ!」と思うこと請け合いなので、一回やってみるとよろしいですよ!
コメントを残す