質問: [ 'checkxox', ]; foreach( $custom_fields as $d ) { if ( isset( $_POST['nonce-' . $d] ) && $_POST['nonce-' . $d] ) { if( check_admin_referer( 'action-' . $d, 'nonce-' . $d ) ) { if( isset( $_POST[$d] ) && $_POST[$d] ) { update_post_meta( $post_id, $d, $_POST[$d] ); }else{ update_post_meta( $post_id, $d, '' ); } } } } } ```
回答: まず、最初に > > 下記のようにupdate_post_metaに配列を使っても1つもチェックされないという問題が発生しました。 > > > や > > update_post_meta($id, 'checkbox', $check_arr); // チェックできません > > > と書かれているのが気になるのですが、`update_post_meta` は、データベースに保存されているカスタムフィールドのデータを更新するだけで、チェックボックスにチェックを入れる機能はありません。 update_post_meta 参照。 追記いただいたコードを拝見すると、 create_checkbox の中で、チェックを入れていますね。 create_checkbox の中で、 > > if( $d === $get_value ) $checked = ' checked'; > > > と比較しているので、 カスタムフィールドの値が1つの時はうまくいきますが、複数の場合は一致しないと思います。 1個でも複数でも動くようにするとすれば、 > > if( $d === $get_value ) $checked = ' checked'; > > > の部分を ~~if ( in_array($d, $get_value) ) $checked = " checked"; (カスタムフィールドがない場合に、エラーが発生するので回答を修正。)~~ ``` if ( ! empty( $get_value ) && in_array($d, $get_value) ) $checked = " checked"; ``` のような感じで、配列に値を含んでいるか調べる感じでしょうか。