商品や物件など、WordPressに大量の投稿を追加したい場合に、CSVデータから投稿を作成する方法をご紹介します。
wp_posts、wp_postmeta、wp_term_relationship などに直接データをインサートする方法もありますが、
各テーブルの詳細な仕様や、WordPressがデフォルトで作成する投稿のメタ情報などを熟知していないと、不完全なデータを作ってしまうため、非常に難易度が高いです。
おすすめは、wp_insert_post() 、update_post_meta()、wp_set_post_terms() など、管理画面からの投稿に使用されている関数をループで回して、データを作成する方法です。
定期的に使用するなら、csvをアップロードするUIをプラグインとして作ってしまった方が良いですが、
1回のみの使用であれば、CSVデータをそのまま、phpMyAdminから一時的に作成したテーブルに流し込み、それをSELECTして処理する方法がおすすめです。
※作業前に必ず、wp_posts、wp_postmeta、wp_terms、wp_term_taxonomy、wp_term_relationship などのテーブルはバックアップを取り、やり直せるようにしておきましょう。
まず、CSVから作成したテーブルtemp_products には、以下のような商品データが入っており、これを投稿タイプproductsで登録するとします。
product_name 商品名→投稿タイトルにする
product_code 商品コード→投稿のスラッグとする
brand ブランド名→タクソノミーbrandとする
price 価格→カスタムフィールドpriceとする
プログラムの設置・実行方法はいくつか考えられますが、
簡単な方法は、一時的に固定ページを作って、page-***.php にプログラムを記述することです(必ず非公開にして、作業後はプログラム自体コメントアウトしておいた方が安全です)。
code
まずはtemp_productsのデータを取得しましょう。
code
WordPressのDB接続オブジェクトである $wpdb を使用すると簡単です。
そして、取得したデータをループで回しながら、投稿を作成していきます。
code
wp_insert_post() の引数である $post には、以下のようなキーを指定できます。
code
基本的には wp_posts テーブルに挿入する情報のみで、カスタムフィールドやタームは別途追加する必要があります。
wp_insert_post() が成功した場合には、挿入された投稿IDが返ってくるので、それを利用します。
code