CSVImporterとカスタムtaxonomy

WordPressにて一括して記事をアップしたい場面があるかと思いますが、そういった場合CSVを使うことが多いんでしょうか。現在担当している案件でクライアントからその旨の指定がありまして、今回それにチャレンジしました。

プラグインとしてはCSV Importerを使用してみました。規定のフォーマットでアップするだけで問題なく記事の登録が可能です。でもその規定のフォーマットを維持するのが少々難しかったので、ひっかかったけど、うまく解決できた点をメモ。

ダブルクォーテーションの維持

今回のプラグインでは、データは必ずダブルクォーテーションで囲んでやる必要があります。そうしないと記事自体が全く認識されません。ところがこれ、エクセルで編集するとあっさりと、なにげなく、消されてしまうんですね。ここで小一時間以上躓きました。

どうやらエクセルではダブルクォーテーションは保存されない模様。ググって試行錯誤してたどり着いた結論は二つ。

置換を用いる方法

エクセルで編集する場合、データ中に最初からカンマが含まれる場合のみデータが自動でダブルクォーテーションで囲まれます。それを利用すべく、全てのデータに最初からカンマを挿入しておいて、あとで別のテキストエディタなどで一括t置換してカンマを消してしまうという手段が可能です。

でもこれにはデメリットがあり、データ中に意図したカンマが含まれる場合は置換でそれまで消えてしまうので使えません。でもそれにも回避策がありまして、消す予定のカンマを使用しない文字と組にして入力しておけば置換の際にそれを目印にして消すことができます。例えばaという文字を単独で用いる機会が無いのであれば、文頭に「a,」と必ず入れるようにしておけば、あとでまとめて「a,」を置換して消去すればOKです。組にする文字には、データに使わない文字列を選定する必要がありますね。

ただこれ、今回データを作るのがお客様なので、お客様にそういったやや面倒な手法を押し付けるのもなんだか・・・で、二つ目の手段

適切なCSVエディタを使う

CSVエディタでダブルクォーテーションが自動で挿入されるような設定が可能なものを入手して、それで編集を行う方法。これができればきっと一番楽ですね。

でもなかなかよいものが見つからず色々と試した末、一番理想の動きをしたのがOpenOfficeでした。OpenOfficeはオープンソースのMS Office互換アプリケーションで、winでもmacでも使い放題です。互換性が結構微妙で動作がやや重いからかあまりメジャーには成り切れず、そもそもMS Officeを持っている方は使う機会も無いでしょうけど、意外にCSV編集(というか保存設定)が秀逸でした。これ、おすすめです。

階層化されたカスタムタクソノミーの取り込み

やり方がまずいんだろうとは思うのですが、僕の場合どう書いても階層化したカスタムタクソノミーが読み込めませんでした。サンプルCSVファイルも付いていて、それを元に色々試してみたのですがどうもうまくいかない。

階層化されていないtermは、カンマ区切りで入力することで全て無事チェックされるのですが、階層化してる場合は、書き方次第でどれかひとつしかチェックされない。

で、回避策として気づいたのは、一旦階層化を解除して、CSVを読み込んだ後に再度階層化する方法。そのtermがどのような構造になっていてどのpostに紐付けられているか、という情報は階層の設定を解除してもDBには残ってるようで、取り込んだ後階層化のオンオフだけまた元に戻せば、termが全てチェックされた状態で階層化解除前の状態に自然に戻ります。

あ、今回のこれはfunctions.phpで試しておりまして、プラグインで階層化している場合は試していませんし、バージョンが違うとひょっとして挙動が異なるかもしれないので、実行の際は自己責任でお願いしますね。

それでなくともここ最近のWPは仕様の変化がすごくて、2.9と3.0と3.1と3.2では、できることも動く環境も、少しずつ重なりあってはいるものの全て微妙に違うという有様。今回のこの案件では当初3.0で構築していたのですが、3.1でないと動かない仕様があることが判明して構築中にびくびくしながらバージョンを上げたり、3.0以降全てのバージョンで出来るはずのことが実は3.1ではバグがあってできなかったり。色々と壁がありました。

でもWordpress、すごく便利になりましたね。機能を適度に活かした楽しそうな案件がありましたらぜひ弊社へ。お待ちしております。