現在WordPressでACFなどのプラグインを使わずに独自のフォームを作っています。
基本的にはテキスト、テキストエリア、チェックボックス(一個の値)、ラジオボタン、画像のフォームは作ることができました。
できないこと(要件)
チェックボックスの複数値の保持
まずコード全文
php
1<?php 2// functions.php 3 4// カスタムフィールドのメタボックス 5function add_custom_fields() { 6 add_meta_box( 'id', '独自カスタムフィールド(通常投稿)', 'insert_custom_fields', 'post', 'normal'); // postにすると通常投稿に追加 7} 8add_action('admin_menu', 'add_custom_fields'); 9 10// post投稿の入力エリア 11function insert_custom_fields() { 12 global $post; 13 14 // チェックボックス(複数値) 15 if( get_post_meta($post->ID, 'custom_checkbox_2',true) == "check_a" ) { 16 $is_check_a = 'checked'; 17 } 18 if( get_post_meta($post->ID, 'custom_checkbox_2',true) == "check_b" ) { 19 $is_check_b = 'checked'; 20 } 21 if( get_post_meta($post->ID, 'custom_checkbox_2',true) == "check_c" ) { 22 $is_check_c = 'checked'; 23 } 24 echo ' 25 <p>チェックボックス</p> 26 <input type="checkbox" name="custom_checkbox_2" id="check_a" value="check_a" '.$is_check_a.' /> 27 <label for="check_a">check_a</label> 28 <input type="checkbox" name="custom_checkbox_2" id="check_b" value="check_b" '.$is_check_b.' /> 29 <label for="check_b">check_b</label> 30 <input type="checkbox" name="custom_checkbox_2" id="check_c" value="check_c" '.$is_check_c.' /> 31 <label for="check_c">check_c</label> 32 '; 33} 34 35// カスタムフィールドの値を保存 36function save_custom_fields( $post_id ) { 37 if(!empty($_POST['custom_checkbox_2'])) { 38 update_post_meta($post_id, 'custom_checkbox_2', $_POST['custom_checkbox_2'] ); 39 } else { 40 delete_post_meta($post_id, 'custom_checkbox_2'); 41 } 42} 43add_action('save_post', 'save_custom_fields');
このコードでは、値が1つしか保持されません。
例えばcheck_a、check_b、check_cの3つ選択したとしても一番最後のcheck_cしか保持されません。
その後やったこと
phpのcheckboxで複数値を保持させるためにはname属性の名称に[]をつけなければならないと知り、やってみましたが、今度は1個すら保持されません。
name="custom_checkbox_2"
→ name="custom_checkbox_2[]"
php
1// メタボックス設定省略 2 3// post投稿の入力エリア 4function insert_custom_fields() { 5 global $post; 6 7 // チェックボックス(複数値) 8 if( get_post_meta($post->ID, 'custom_checkbox_2',true) == "check_a" ) { 9 $is_check_a = 'checked'; 10 } 11 if( get_post_meta($post->ID, 'custom_checkbox_2',true) == "check_b" ) { 12 $is_check_b = 'checked'; 13 } 14 if( get_post_meta($post->ID, 'custom_checkbox_2',true) == "check_c" ) { 15 $is_check_c = 'checked'; 16 } 17 echo ' 18 <p>チェックボックス</p> 19 <input type="checkbox" name="custom_checkbox_2[]" id="check_a" value="check_a" '.$is_check_a.' /> 20 <label for="check_a">check_a</label> 21 <input type="checkbox" name="custom_checkbox_2[]" id="check_b" value="check_b" '.$is_check_b.' /> 22 <label for="check_b">check_b</label> 23 <input type="checkbox" name="custom_checkbox_2[]" id="check_c" value="check_c" '.$is_check_c.' /> 24 <label for="check_c">check_c</label> 25 '; 26} 27 28// 保存部分省略
現在はここで停滞しております。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/09 06:28