MENU

カスタムフィールド管理系プラグイン「Custom Field Suite」(以下、CFS)を使用している時に、とあるバグのようなものに悩まされていることがありました。

それがタイトルにある通り、画像フィールドの返り値にURLを指定しているのに、IDしか取得できねぇ!というもの。

実はこれ、バグなどではなく私が正しくプラグインを扱えていなかったことにありました。

目次

原因と解決方法

まず、この現象が起こる原因についてです。

私のケースでは、CFSで追加した画像フィールドの値を、デフォルトのカスタムフィールドのように「post_custom()」や「get_post_meta()」で取得していた場合に発生していることが判明しました。

ですが、このプラグイン本来のカスタムフィールドの値の取得方法は「CFS->get('key')」という型なんですよね。

WordPressがデフォルトで値を保存している場とは別に、CFS専用のオブジェクトの中に値を格納しているということなのでしょう。

ただ、その他のフィールドの値は何の問題もなく通常のカスタムフィールドと同様にpost_custom()などの関数で取得できます。

例:現在の投稿の 'key' で登録されているカスタムフィールド (CFSで追加したフィールド) を取得する場合、以下の二つは基本的に同値。

post_custom('key');
CFS->get('key');

このように、上記どちらも値が一緒なのであればCFS以外を使用してもカスタムフィールドが扱えるようにと思い、デフォルトの関数を基本的には使用していました。

ただ、ループフィールドの中身を取得する場合は、これでは取得できないので、

<?php
  $fields = CFS()->get('loop');
  foreach ($fields as $field) {
    echo $field['loop_key'];
  }
?>

このように取得しなければならないことは知っており、

基本的に画像フィールドを使用する時はループフィールドの中で画像フィールドを実装することが多く、上記ループの中で画像フィールドの値を取得すると問題なくURLで取得できていました。

なので、最近になって何度か今回の現象に遭遇するまで、自分の記述方法に問題があることに気づいていなかったのです。

IDでも画像を表示することは簡単なので、IDしか返ってこない場合はそちらで対処していました。笑

解決策

長々と個人的なケースについて書きましたが、要するに画像フィールドの値をURLで取得したい場合は、プラグイン本来の使い方である「CFS->get('key')」で取得しなければならない、というのが結論です。

これで、ループでなくでもループであっても画像フィールドの値が無事にURLで取得できます。(もちろん返り値の指定をURLにしている時、です。)

同様の現象に悩まされている人がもしいるのであれば、値の取得方法を確認してみてください!

おまけ

post_custom()とCFS()->get()の違い他にもあります。

取得したいフィールドの値が空の場合の返り値が異なるのです。

post_custom()は false、CFS()->get()は NULL を返す仕組みになっています。是非確認してみてください。

- Thank you for reading this to the end. -
TOPへ Top