別で運用してた記事や画像が300件以上…。これWordpressに手入力しないといけないのかな…う~ん…
手入力してたら、いくら時間あっても足りなくなっちゃうね。CSVとプラグインを使って、まとめて登録していきましょ!
メモ
使用するプラグイン「Really Simple CSV Importer」は、カスタム投稿・カスタムフィールド(Advanced Custom Fields)もサポートしているのでとても便利ですが、最終更新: 5年前と古いためプラグインに不安があるなら、データ登録が終わったら停止または削除してください。1下準備
今回データ移行に使う「Really Simple CSV Importer」を、管理画面のプラグインから有効化しておきましょう。 管理画面の「ツール」→「インポート」に進み、CSVインポーターの実行から「サンプルCSVファイルをダウンロード: csv」をダウンロードします。 ※投稿にカスタム投稿やカスタムフィールドなどを使用する場合、Wordpressに設定しておきましょう。2CSVファイルを編集しよう
CSVファイルの編集は、ExcelまたはCassava Editor(フリーソフト)がオススメです。 サンプルCSVファイルを開いて、1行目にかかれたタグはカスタムフィールドがある場合、編集が必要になります。1行目のタグについて
サンプルCSVの1行目タグを見てみましょう。post_id | 新しい記事の場合は空白またはなし、すでに登録した記事を編集する場合は記事のIDを入れます。 |
---|---|
post_name | 投稿のスラッグ、空白またはなしでもOK |
post_author | 投稿するユーザーのIDを指定 |
post_date | 記事の日付を指定できます。 入力例:2020/02/07 0:00:00 |
post_type | 投稿の種類を指定します。 投稿「post」、固定ページ「page」、カスタム投稿「カスタム投稿タイプ名」 |
post_status | 公開や下書きなどの投稿ステータスの指定。公開の場合は「publish」 |
post_title | 記事のタイトル |
post_content | 記事の内容。HTML可、画像を表示させる場合はimgタグを使用します。 |
post_category | 投稿(post)カテゴリーのスラッグを指定。複数の場合はカンマ区切り 入力例:family,event,diary |
post_tags | 投稿(post)タグのスラッグで指定。複数の場合はカンマ区切り 入力例:tag1,tag2,tag3 |
custom_field | カスタムフィールドを設置している場合、1行目の「custom_field」をカスタムフィールド名に編集します |
post_typeは必須項目です。
サンプルCSVの1行目に記載されていないものの、よく使うタグpost_thumbnail | アイキャッチ画像のURLを指定 |
---|---|
tax_{taxonomy} | カスタムタクソノミー(カスタム投稿タイプのカテゴリやタグなど)を指定。 例えばproduct_categoryというタクソノミーを設定した場合は「tax_product_category」と編集します。 |
すべての項目を記載する必要はないので、必要なものだけ1行目に設定して利用します。
CSVデータは必ず「UTF-8」で保存する
CSVの編集が終わって、保存をする時には必ず文字コードを「UTF-8」で保存をします。 UTF-8で保存しない場合、インポートする際に「データベースに投稿を追加できませんでした。WP_Postオブジェクトがセットされていません。」とエラーが出て登録ができません。3CSVデータをアップロードしよう
管理画面の「ツール」→「インポート」に進み、CSVインポーターの実行から編集したCSVファイルを選択して「ファイルをアップロードしてインポート」を行います。手動で入力するよりは時間かからないものの、CSVファイルの編集が一番時間かかりますね。お疲れさまでした!
カスタムフィールドの画像
「Really Simple CSV Importer Media Plus」という派生プラグインを使うと、画像をカスタムフィールドに配置し、画像IDで表示ができるようになります。 ※Download ZIPでダウンロードしたものを、プラグインアップロードで有効化<?php $image = wp_get_attachment_image_src(get_field('フィールド名'), 'full'); ?>
<img src="<?php echo $image[0]; ?>" alt="<?php echo get_the_title(get_field('フィールド名')) ?>" />
その他:エラーメッセージ post_id
アップロードをすると「CSVファイルからの投稿タイプ値は、データベース内の既存のデータと一致しません。post_id: ***、post_type(csv): ihin-sorting、post_type(db): attachment」とエラーが出た場合は、post_idとアイキャッチ画像に当てられたidが被っている(細かく書くと違うけれど)ので、post_idを違うものに変更してアップロードまたは空白にしてアップロードしてみてください。※エラーが出る条件は、post_id(事前にpost_idを指定して新規アップロードしたい)とアイキャッチ画像が設定されたCSVをアップロードする時
その他:エラーメッセージ タイムアウト
「Fatal error: Maximum execution time of 0 seconds exceeded in ****/wp-includes/class-wp-image-editor-imagick.php on line 362」 max_execution_timeは処理のタイムアウトなので、php.iniの設定を確認してみてください。0になっていれば無制限ですが、max_input_timeの値でタイムアウトしている場合があるので、こちらもチェックしてみてください。 php.iniで編集ができない場合は、.htaccessで編集がおすすめです。<IfModule mod_php7.c>
php_value post_max_size "32M"
php_value upload_max_filesize "24M"
php_value memory_limit "128M"
php_value max_execution_time "120"
php_value max_input_time "120"
</IfModule>
その他:運用面でのポイント
post_idの部分を「空でアップロードすれば新規登録」「post_idを入れれば更新」といった感じですが、最初に空でアップロードした後に、1記事づつpost_idを確認してCSVに入力が面倒…
という時には、最初の新規登録の段階で、post_idを自分の都合のいいID番号を入れてアップロードでも利用できます。
(ただし、WordPressの仕様上、管理画面から何か投稿や固定ページを作成すると自動的にpost_idが付与されるので、それと被らないようにだけ注意)
便利なプラグインなので、ぜひ活用してみてくださいね!