サポート » 使い方全般 » カスタムフィールドでチェックボックスを使用したい

  • 解決済 匿名

    お世話になります。

    カスタムフィールドでチェックボックスを使用したいのですが複数選択した際に反映されませんのでお力を貸してください。
    (今回はカスタムフィールドはカスタムフィールドテンプレートプラグインを使用しており、チェックボックスのほかに1つテキスト入力もあります。プラグインが原因ではないと思いますので使い方全般でお聞きします)

    http://q.hatena.ne.jp/1331453695
    上記リンク先を参考に下記フォームを作成(title、content、カスタムフィールドで制作したgroupname、area)

    <form action="http://example.com/formtest_next/" method="post" name="form">
     <table cellpadding="5" cellspacing="0" id="contact">
      <tr>
       <th>グループ名称</th>
       <td><input name="post_title" type="text" size="50">
       </td>
      </tr>
      <tr>
       <th>グループ名称<br />(確認用)</th>
       <td colspan="3"><input id="groupname" name="groupname" type="text" size="50"></td>
      </tr>
      <tr>
      <th>エリア</th>
      <td>
    <input name="area[]" value="名古屋" type="checkbox" /> 名古屋
    <input name="area[]" value="尾張" type="checkbox" /> 尾張
      </td>
      </tr>
      <tr>
       <th>紹介文</th>
       <td><textarea name="post_content" cols="50" rows="10"></textarea>
       </td>
      </tr>
     </table>
    <input type="submit" name="Submit" value="投稿する">

    formtest_next

    <?php
    require('./wp-blog-header.php');
    //require('./wp-load.php');
    header('Location: http://example.com/'); // 投稿を押した後のページ
    
    if(!empty($_POST)) {
    
        $title = $_POST["post_title"] ;
        $content = $_POST["post_content"] ;
        $groupname = $_POST["groupname"] ;
        $area = $_POST["area"] ;
    
        $post = array(
            'post_status' => 'draft',
            'post_title' => $title,
            'post_content' => $content,
            'post_type' => 'group',
        );
    
        $post_id = wp_insert_post($post);
    
        if($post_id != '0') {
            add_post_meta($post_id, 'groupname', $groupname);
            //area
            add_post_meta($post_id, 'area', $area, false);
        }
    ?>

    管理画面で確認すると、下書きとして保存した記事(post_id110)タイトル、本文、グループ名称箇所はきちんと入力した内容が反映されていますが、チェックボックスだけ反映されません(どのボタンもチェックされていない状態)
    また、データベースのpostmetaを覗くとmeta_keyにarea、meta_valueにa:2:{i:0;s:9:”名古屋”;i:1;s:6:”尾張”;}となっています
    これを
    post_id│meta_key│meta_value
    110│area│名古屋
    110│area│尾張
    とするにはどうしたらよいのでしょうか。

    同じような質問でunserialize関数を利用するといいとhttp://ja.forums.wordpress.org/topic/8942で書かれていたのですが、今回の場合どこにどう記述したらよいのかわからず行き詰っております。

    よろしくお願い致します。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • 次のHTMLにしているのでしたら、$areaは配列になるはずです。
     

    <input name="area[]" value="名古屋" type="checkbox" /> 名古屋
    <input name="area[]" value="尾張" type="checkbox" /> 尾張

     
    ‘area’フィールドへの保存は、foreach()で回してadd_post_meta()を実行してはいかがでしょうか?

    まず私事により回答が遅れましたことをお詫び申し上げます。

    popupさんご返答をありがとうございました。

    >area’フィールドへの保存は、foreach()で回してadd_post_meta()を実行してはいかがでしょうか?

    こちらの解読のためいろいろ試行錯誤しましたがどうも思うような結果にならず1ヶ月苦戦しております

    $area=array(
    	    '名古屋'=>'名古屋',
    	    '尾張'=>'尾張',
    	);
    	foreach ($area as $key => $val) {
    	        add_post_meta($post_id, 'area', $area, false);
    	}

    としてみたところデータがデータベースに登録されなくなってしまいました。
    希望通り複数チェックした際にMySQLに
    post_id│meta_key│meta_value
    110│area│名古屋
    110│area│尾張
    と表示させるためにはどのようにしたらよいのでしょうか。
    よろしくお願い致します。

    〜〜略〜〜
    
    $area = $_POST["area"] ;
    
    〜〜略〜〜
    
    if($post_id != '0') {
      add_post_meta($post_id, 'groupname', $groupname);
    
      foreach ( (array) $area as $a )
        add_post_meta($post_id, 'area', $a, false);
    }

    かしら。

    kzさん返答をありがとうございました!
    お陰様でお教えいただきました通りやってみたところ、希望通りの表示にすることができました!

    PHPに不慣れでお手数おかけしましたが無事解決とさせていただきます。
    これを機にもっとPHPを勉強していきたいとおもいます。

    ありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「カスタムフィールドでチェックボックスを使用したい」には新たに返信することはできません。