メタボックスに出力されるチェックボックスの数が固定されていないという要件があります。それが修正されていれば、私は各チェックボックスに名前を付けてupdate_post_meta()
を使ってそれを保存することを提案するインターネット上のチュートリアルのどれか一つに従うことができました。
私の場合は、チェックボックスの数が不明なので、配列表記でチェックボックスの名前をname = 'multval[]'
にしました。
使い方がわからない。
get_post_meta()
checked()
update_post_meta()
配列として命名されたときにチェックボックスにアクセスすることになると。
コード:
<?php
add_action( 'add_meta_boxes', function() {
add_meta_box( 'custom-metabox', 'Select values', 'fill_metabox', 'post', 'normal' );
});
function fill_metabox( $post ) {
wp_nonce_field( basename(__FILE__), 'mam_nonce' );
// How to use 'get_post_meta()' for multiple checkboxes as array?
$elements = get_elements(); //returns an associative array
foreach ( $elements as $element) {
?>
<p>
<input
type = "checkbox"
name = "multval[]"
value = <?php echo $element;?>
//How to use checked() function in case of
//multiple checkbox as arrays
>
<?php echo $element;?>
</p>
<?php
}
}
add_action( 'save_post', function( $post_id ) {
$is_autosave = wp_is_post_autosave( $post_id );
$is_revision = wp_is_post_revision( $post_id );
$is_valid_nonce = ( isset( $_POST[ 'mam_nonce' ] ) && wp_verify_nonce( $_POST[ 'mam_nonce' ], basename( __FILE__ ) ) ) ? 'true' : 'false';
if ( $is_autosave || $is_revision || !$is_valid_nonce ) {
return;
}
/*How to run a loop to save values for each checkbox?*/
});
次のコードを試してください。
add_action( 'add_meta_boxes', function() {
add_meta_box( 'custom-metabox', 'Select values', 'fill_metabox', 'post', 'normal' );
});
function fill_metabox( $post ) {
wp_nonce_field( basename(__FILE__), 'mam_nonce' );
// How to use 'get_post_meta()' for multiple checkboxes as array?
$postmeta = maybe_unserialize( get_post_meta( $post->ID, 'elements', true ) );
// Our associative array here. id = value
$elements = array(
'Apple' => 'Apple',
'orange' => 'Orange',
'banana' => 'Banana'
);
// Loop through array and make a checkbox for each element
foreach ( $elements as $id => $element) {
// If the postmeta for checkboxes exist and
// this element is part of saved meta check it.
if ( is_array( $postmeta ) && in_array( $id, $postmeta ) ) {
$checked = 'checked="checked"';
} else {
$checked = null;
}
?>
<p>
<input type="checkbox" name="multval[]" value="<?php echo $id;?>" <?php echo $checked; ?> />
<?php echo $element;?>
</p>
<?php
}
}
add_action( 'save_post', function( $post_id ) {
$is_autosave = wp_is_post_autosave( $post_id );
$is_revision = wp_is_post_revision( $post_id );
$is_valid_nonce = ( isset( $_POST[ 'mam_nonce' ] ) && wp_verify_nonce( $_POST[ 'mam_nonce' ], basename( __FILE__ ) ) ) ? 'true' : 'false';
if ( $is_autosave || $is_revision || !$is_valid_nonce ) {
return;
}
// If the checkbox was not empty, save it as array in post meta
if ( ! empty( $_POST['multval'] ) ) {
update_post_meta( $post_id, 'elements', $_POST['multval'] );
// Otherwise just delete it if its blank value.
} else {
delete_post_meta( $post_id, 'elements' );
}
});