WordPressでWP-CLIを使って記事移行とかを少し楽にする

WordPressでWP-CLIを使って記事移行とかを少し楽にする

Kazuya Takato

Kazuya Takato

こんにちは、エンジニアのづやです。

ここのところ、「CSVからWordPressにデータを取り込みたい!」「ルールに沿って特定のカテゴリを違うカテゴリに付け替えたい!」などのお話を受けることが多かったので、苦労した点とかを共有したいと思います。

気軽なやり方

全然大したことない処理のときは、phpファイルを作って、WordPressだけ呼び出して処理ですね、お手軽。

<!--?php require_once "wp-load.php"; // パスは環境によって変えてね ?-->

これを読み込んだら、WordPress関数が使えるので、CLIからphpとして実行したり、まあdocument rootにおいて実行して消すなりしちゃえばOKです。WordPress管理外じゃないけど、WordPressの記事を引っ張りたいときとかと一緒ですね。

たまに「wp-blog-header.php」をロードしてる人を見ますが、正常に動いてるようでhttpステータス 200じゃなかったりするので注意です。

WP-CLIを使ったかっちりしたやり方

ちゃんとやるなら、WP CLIで決まりです。

WP-CLIはコマンドラインからWordPressを管理できるツールでして、なかなか便利です。めちゃくちゃいろんなことができるのですが、例えばサイトURL変更の際とかは、wp search-replaceを使っている方も多いのではないかと思います。

SQLでもURLの置換は可能ですが、WP-CLIで行うとシリアライズされたデータ内も置換してくれたり素晴らしいです。WP-CLIを使ってバッチを作成すると、wpコマンドを使えることができ、やれることの幅が広がります。

バッチファイルの作り方

まずは適当なphpファイルを作ります。ファイルの中には、WP_CLI_Commandを継承したクラスを作成し、行いたい処理を書いた関数を作ります。

そして再度クラスをWP_CLIのコマンドして登録するための、add_commandをしてあげます。ここではファイル名はsample.phpとします。

class Sample_Command extends WP_CLI_Command {

function hello(){
echo "hello";
}
}

// 第1引数がCLIから呼ぶコマンド名、第2引数が作成したクラスですね
WP_CLI::add_command( 'sample', 'Sample_Command' );

そしたらWordPressがインストールされているディレクトリに、wp-cli.ymlを作成して先ほど作成したファイルまでのパスを記載してあげます。

require:
- ./sample.php

これで準備完了です。

お手持ちのCLIから「wp sample hello」を実行してみましょう。うまくいっていたらコマンドラインに「hello」とでるのではないでしょうか。

画像をアップロードしてみる

これでは何が便利か伝わりきらないと思うので、よくあるケースを考えてみます。テキストデータはCSVでもらって、画像は実ファイルを別でもらっているパターンを考えてみます。

投稿タイプとして登録したり、カスタムフィールドを作ったり、カテゴリつけたりは大変ではないかと思います。画像だけどう扱うかを苦労してるんですが、WP-CLIを使うのが一番いいのではと思っています。

例えばこんな感じで実装してみましょう。実際はループの中で実装すると思うので大事なところだけです。

$file_path = "xxxx.jpg"; // importしたい画像のパス
$post_id = 1; // 画像を紐づけたい記事ID
$title = "画像XXXX"; // 画像のタイトル

$command = "media import --post_id={$post_id} --title={$title} {$new_file}";

$attachment_id = WP_CLI::runcommand($command . ' --porcelain', ['return' => true]);

post_idとかtitleはオプションです。こちらのドキュメントに記載のやつが使えます。

こちらを実行すると、画像を登録してくれて、登録された投稿タイプ「attachment」の投稿の記事IDが$attachment_idに帰ってきます。upload時に利用してるhookなどがあればそれもちゃんと呼ばれます。

ACFとか使ってる場合は、この戻り値をACFの画像フィールドに紐づけたり簡単に行えますね。WP-CLIで使えるいろんな機能をデータ処理内で使えるので、使いこなしたら便利になるのではないでしょうか。

ではまた。

関連情報:WordPressの特徴・レビュー紹介ページ

LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

Kazuya Takato
Kazuya Takato 取締役 COO 兼 CTO / DX事業本部長 / 高遠 和也

1983年生まれ。SIerとしてのキャリアをスタートし、JavaやC#を中心に多岐にわたる開発プロジェクトにエンジニアとして参加。その経験を活かし、LIGを創業。バックエンドおよびフロントエンドエンジニアとしての深い知識と経験をもとに、多様なプロジェクトに従事。現在は、取締役COO兼CTO、DX事業本部長として、社内の体制やルールの最適化、AI技術の推進など、経営戦略の一翼を担う。

このメンバーの記事をもっと読む
デザイン力×グローバルな開発体制でDXをトータル支援
お問い合わせ 会社概要DL