サポート » プラグイン » Smart Custom Fieldsでチェックボックスを使用して正常に出力されない

  • 解決済 wakasat

    (@wakasat)


    お世話になります。

    カスタムフィールドを使用して会員情報入力欄を作成しています。
    最初はAdvanced custom Fieldsを利用して実装したのですが、カスタムフィールドを検索する必要があったので取りやめ、代わりにSmart Custom Fieldsを使用することにしました。
    他はほぼ上手くいったのですが、チェックボックスだけがうまく出力されません。
    繰り返しフィールドの中にチェックボックスを入れると、
    複数のチェックボックスの結果欄がすべて同じ内容になってしまいます。

    プラグインの作者さんのサイトで以下の記事を読みました。
    WordPress でカスタムフィールドを簡単に設定できるプラグインを作成していてハマったところ

    <?php the_meta(); ?>
    これで出力させてみたところ、
    smart-cf-repeat-multiple-data: a:1:{s:6:"market";a:3:{i:0;i:5;i:1;i:7;i:2;i:1;}}
    これがそれに当たるのかなと思うのですが、
    私の環境でそうなっているのかどうなのかが分かりません。

    ちなみにチェックボックスは

    <?php
    $temp_data = get_post_custom($post->ID);
    if(is_array($temp_data)){
    $data = implode(' ', $temp_data['market']);
    echo $data;
    }
    ?>

    で出力しています。

    申し訳ありませんがご助力いただけると大変うれしいです。
    よろしくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • 作者です。チェックボックスや関連フィールドなど、複数値を持ち得るフィールドの場合は WordPress 標準の関数では正しい値が返せません。どのグループの値か、というのを管理するための値が別途必要になるためです。

    そのようなフィールドの値を正しく取得するには Smart Custom Fields のメソッドを使い値を取得すれば大丈夫です。

    $temp_data = get_post_custom($post->ID);
    ↓ ではなくてこうする
    $temp_data = SCF::get($post->ID);
    トピック投稿者 wakasat

    (@wakasat)

    Takashi Kitajima様

    お早いご回答ありがとうございます。

    <?php
    $temp_data = SCF::get($post->ID);
    if(is_array($temp_data)){
    $data = implode(' ', $temp_data['market']);
    echo $data;
    }
    ?>

    こちらで修正してみたところ、何も出力されなくなってしまいました。
    コードが間違っているのでしょうか?

    うーん、ちょっとエラーメッセージを見てみないとなんともわかりません。
    何も出力されないということはデバッグモードが無効になっていると思いますので、有効にしてからもう一度確認してみてください。
    http://gatespace.jp/2012/07/20/wordpress-debugging/

    あ、ちょっとコードも違う気がしてきました。こうですかね…?

    <?php
    $market = SCF::get('market');
    if(is_array($market)){
    $data = implode(' ', $market);
    echo $data;
    }
    ?>

    実際に動かしているわけではないので、一応SCF::get('market');の返り値をvar_dump()で確認してみてください。

    トピック投稿者 wakasat

    (@wakasat)

    Takashi Kitajima様

    ご返信ありがとうございます。

    上記の私の修正はデバッグモードが有効になった状態で何も表示されませんでした。
    教えて頂いたコードで少し色々といじって何とか表示することができました。

    ループが始まる前に$kiji_no = 0;を記述して

    <?php
    $market = SCF::get('market');
    if(is_array($market)){
    	$hoge = array();
    	foreach($market as $valus){
    		$hoge[] = implode(',',$valus);
    	}	
    	echo $hoge[$kiji_no];
    	$kiji_no++;
    }
    ?>

    と記述しています。
    もっと奇麗に表示する方法があるのだろうと思いますがこれが限界でした…

    検索をしてみたところヒットしました。本当にありがとうございます。

    ちょっとした要望なのですが、Advanced custom Fieldsのメッセージのような、
    HTMLを入力する欄やタブなどがあると便利だなと思います。
    今回の入力フォームは長いので途中に説明などを挿入したく…

    このたびは助けていただきありがとうございました。
    これからも利用させていただきます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「Smart Custom Fieldsでチェックボックスを使用して正常に出力されない」には新たに返信することはできません。