Blog

Web制作開発に役立ちそうなTipsや、インターネットに思うことなどを不定期で書いています。

【WP】Custom Field Suite + Duplicate Post の組み合わせで起こる問題を解決する

またまた、長ーい間ブログを放置してしまいました。

あまりにもブログの更新が無くtwitterでも呟きが無いものですから、先日久しぶりにお電話をいただいた方から「土田さん、まだフリーでやってます?」と聞かれてしまいました。お恥ずかしい。

冬から春にかけてはこれまでになく沢山の案件をいただきまして、強烈に忙しい日々を過ごしておりました。制作事例でなかなか紹介するのが難しいのですが、大手商社様、大手エネルギー開発企業様、大手證券会社様、大手通信会社様…などなど、名立たる企業様のコーポレートサイトのリニューアルや採用サイトの制作開発をさせていただくことができました。

年度が明けてから暫くは燃え尽きたような日々が少しあったのですが、ありがたい事にまたこの夏にかけて、複数の大きな開発案件をいただいておりまして目下夏休みの死守に邁進している今日このごろです。

さて今日の本題です。

以前、[WP]Duplicate Postを使用して複製した記事のカスタムフィールドレコードが無駄に増えていく?というエントリーで書いた、Custom Field Suite + Duplicate Postの組み合わせで起きる問題が解決できそうなので、それをご紹介します。

Custom Field Suite(以下CFS)はWordPressのカスタムフィードをパワフルに管理できるプラグインで、私もWordPressでの開発時にはほぼ使用しています。一方Duplicate Postは、記事の複製を行うプラグインで、ECサイトや求人サイトでは需要の高いプラグインです。

上記のエントリーでも書いていますが、この2つを組み合わせて使用する場合に次のような問題がありました。

CFSでフィールドタイプを「セレクト(ドロップダウンリスト)」にして、「複数選択を可能にする」とした場合に、同じmetakeyを持つ複数のデータがデータベース(_postmeta)に格納されます。このmetaデータを持った記事をDuplicate Postで複製した場合、複製元のmetaデータが残ってしまい、複製する毎に不要なデータが増えていくという問題があります。

ちなみにtextareaなど単一のmetakeyとvalueで構成されるmetaデータは問題はなく、元のmetaデータを削除して新しいmetaデータを格納するという動きがCFSのバージョン2から実装されています。

通常の記事表示では、上記の問題で困ることは特にありません。「CFS()->get」で最新の情報だけを正常に取得してきてくれます。

ところが、問題の項目を検索対象にしたり、「get_post_meta」で取得したりしたい場合は大問題になってしまいます。古いデータが検索対象になってしまったり、消したはずのデータが表示されたりしてしまいます。

この問題を解消するには、プラグインフォルダの中にある

custom-field-suite / includes / third_party.php

を開き、160目付近にある

1
2
3
<br />
delete_post_meta( $new_post_id, $key, $value );</p>
<p>

の記述を

1
2
<br />
delete_post_meta( $new_post_id, $key );<br />

としてしまいます。細かい話は省略しますが、$valueが単一の値だろうが配列だろうが、どのみち一度クリアにして、新しいデータとして保存をし直しましょうよ、ってことです。

CFSのアップデートがあると上記の変更は元に戻る可能性もありますのでご注意ください。単純な変更に長々書いてすみません。

もう一つ、WordPressで複数の全く異なる条件をミックスして該当する記事を呼び出す方法もご紹介したいと思っていますが、小出しに、次回できるだけ早く書きたいと思います。

お気軽にお問い合わせください。
お見積りは無料です。