あるCMSをWordPressに移行するという事で、既存データを流し込みたいという依頼がありました。
そこで、関数wp_insert_postを使って投稿を一気に流し込む方法を考えてみます。
はじめは、それぞれのCMSでDB上のデータ構造が異なるので、詳細を把握した上で、PHPでDBからDBへのデータ移行プログラムを書くという、かなりリスクのある方法を検討していました。
しかし、WordPressのDBを直接操作することは、後に整合性がとれなくなるなど危険があります。
調べてみると、WordPressでは管理画面のインタフェースから記事を投稿する以外に、関数wp_insert_postを使ってプログラム上から整合性のとれた投稿が可能なことを知ったので、これを利用することにしました。
wp_insert_postを使った記事投稿
WordPressの関数「wp_insert_post」を使えば、functions.phpやプラグインなどから、コードベースで記事を投稿することができます。
$params = array( 'post_author' => 1, // ユーザID 'post_name' => 'スラッグ', // パーマリンク 'post_title' => 'タイトル', // 投稿タイトル 'post_content' => '本文本文本文本文本文本文', // 投稿本文 'post_category' => array(5), // カテゴリID 'tags_input' => array('タグ1','タグ2','タグ3'), // タグ名 'post_status' => 'draft' // ステータス ); $id = wp_insert_post($params);
カスタム投稿の場合は、「’post_type’ => ‘custom1’」というようにして、投稿タイプを指定します。
カスタムフィールドに値をセットする
関数「update_post_meta」を利用することで、カスタムフィールドの値をセットすることができます。
$id = wp_insert_post($params); if($id){ update_post_meta($id, 'field1', '食品'); update_post_meta($id, 'field2', '果物'); update_post_meta($id, 'field3', '日本'); }
wp_insert_postは投稿が失敗するとfalseを返し、成功すると投稿IDを返すので、その値をキーにカスタムフィールド名を指定して値をセットします。
データ元が配列、XMLやCSVの場合、上記の処理をループさせることで、大量のデータをWordPressに流し込むことができますね。
今後、さまざまな移行作業の際に活用できそうです。
コメントする