Я создал пользовательский тип сообщения в плагине WordPress. В пользовательском типе сообщений есть несколько настраиваемых метабоксов — в моих настраиваемых метабоксах у меня есть радиовход.
Проблема, с которой я сталкиваюсь, заключается в сохранении выбора этого радио входа в базу данных. Всякий раз, когда я нажимаю сохранить, он забывает выбор.
Вот мой код для моих метабоксов:
function render_meta_boxes( $post ) {
$meta = get_post_custom( $post->ID );
$name = ! isset( $meta['singer_name'][0] ) ? '' : $meta['singer_name'][0];
$tagline = ! isset( $meta['singer_tagline'][0] ) ? '' : $meta['singer_tagline'][0];
$bio = ! isset( $meta['singer_bio'][0] ) ? '' : $meta['singer_bio'][0];
$gender = ! isset( $meta['singer_gender'][0] ) ? '' : $meta['singer_gender'][0];
wp_nonce_field( basename( __FILE__ ), 'singer_profile' );
?>
<table class="form-table">
<tr>
<td class="singers_meta_box_td" colspan="2">
<label for="singer_name"><?php _e( 'Singer Name', 'singers_post_type' ); ?>
</label>
</td>
<td colspan="4">
<input type="text" name="singer_name" class="regular-text" value="<?php echo $name; ?>">
</td>
</tr>
<tr>
<td class="singers_meta_box_td" colspan="2">
<label for="singer_tagline"><?php _e( 'Singer Tagline', 'singers_post_type' ); ?>
</label>
</td>
<td colspan="4">
<input type="text" name="singer_tagline" class="regular-text" value="<?php echo $tagline; ?>">
</td>
</tr>
<tr>
<td class="singers_meta_box_td" colspan="2">
<label for="singer_bio"><?php _e( 'Singer Bio', 'singers_post_type' ); ?>
</label>
</td>
<td colspan="4">
<textarea rows="10" style="width:25em;" name="singer_bio" class="regular-text"><?php echo $bio; ?></textarea>
</td>
</tr>
<tr>
<td class="singers_meta_box_td" colspan="2">
<label for="singer_gender"><?php _e( 'Gender', 'singers_post_type' ); ?>
</label>
</td>
<td colspan="4">
<input type="radio" name="singer_gender" value="male"> Male<br>
<input type="radio" name="singer_gender" value="female"> Female
</td>
</tr>
</table>
<?php }
/**
* Save metaboxes
*
* @since 0.1.0
*/
function save_meta_boxes( $post_id ) {
global $post;
// Verify nonce
if ( !isset( $_POST['singer_profile'] ) || !wp_verify_nonce( $_POST['singer_profile'], basename(__FILE__) ) ) {
return $post_id;
}
// Check Autosave
if ( (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) || ( defined('DOING_AJAX') && DOING_AJAX) || isset($_REQUEST['bulk_edit']) ) {
return $post_id;
}
// Don't save if only a revision
if ( isset( $post->post_type ) && $post->post_type == 'revision' ) {
return $post_id;
}
// Check permissions
if ( !current_user_can( 'edit_post', $post->ID ) ) {
return $post_id;
}
$meta['singer_name'] = ( isset( $_POST['singer_name'] ) ? esc_textarea( $_POST['singer_name'] ) : '' );
$meta['singer_bio'] = ( isset( $_POST['singer_bio'] ) ? esc_textarea( $_POST['singer_bio'] ) : '' );
$meta['singer_tagline'] = ( isset( $_POST['singer_tagline'] ) ? esc_textarea( $_POST['singer_tagline'] ) : '' );
$meta['singer_gender'] = ( isset( $_POST['singer_gender'] ) ? sanitize_html_class( $_POST['singer_gender'] ) : '' );
foreach ( $meta as $key => $value ) {
update_post_meta( $post->ID, $key, $value );
}
}
Вы можете видеть, что радиовходы — это только мужские и женские варианты, а затем в нижней части скрипта находится место, где обрабатывается сохранение. Я не могу понять, как сохранить выбор.