How to add checkbox and radio button in Profile Page

I liked to customize my profile page by adding new fields to get more info from the user like “Gender” or “Speaking Languages”. I managed to get the text input form to work, the problem I having now is on the radio and checkbox type of input.
Here is my code:

function my_user_field( $user ) {
            ?>
                <h3><?php _e('More About You'); ?></h3>
                <table class="form-table">
                    <tr>
                        <th>
                            <label for="Dealing Type"><?php _e('Gender'); ?>
                        </label></th>
                        <td><span class="description"><?php _e('Gender?'); ?></span><br>
                        <label><input type="radio" name="dealing" value="Male">Male<br /></label>
                        <label><input type="radio" name="dealing" value="Female">Female<br /></label>

                        </td>
                    </tr>

                    <tr>
                        <th>
                            <label for="company"><?php _e('Company'); ?>
                        </label></th>
                        <td>
                          <span class="description"><?php _e('Insert Your Company name'); ?></span><br>
                            <input type="text" name="company" id="company" value="<?php echo esc_attr( get_the_author_meta( 'company', $user->ID ) ); ?>" class="regular-text" /><br />

                        </td>
                    </tr>

                    <tr>
                        <th>
                            <label for="language"><?php _e('Language'); ?>
                        </label></th>
                        <td><input type="checkbox" name="Engilsh" value="Malay" /> English<br />
                            <input type="checkbox" name="language" value="Mandarin" /> Mandarin<br />


                        </td>
                    </tr>
                </table>

            <?php }


            function my_save_custom_user_profile_fields( $user_id ) {
                if ( !current_user_can( 'edit_user', $user_id ) )
                    return FALSE;
                update_usermeta( $user_id, 'gender', $_POST['gender'] );
                update_usermeta( $user_id, 'company', $_POST['company'] );
                update_usermeta( $user_id, 'language', $_POST['language'] );

            }
            add_action( 'show_user_profile', 'my_user_field' );
            add_action( 'edit_user_profile', 'my_user_field' );
            add_action( 'personal_options_update', 'my_save_custom_user_profile_fields' );
            add_action( 'edit_user_profile_update', 'my_save_custom_user_profile_fields' );

The “Gender” and “Languages” are not passing through the $_post[]. I am new to coding, hope you guys can help.

Related posts

Leave a Reply

1 comment

  1. You are missing the “checked” value for the inputs

    <input type="checkbox" name="language" <?php if (get_the_author_meta( 'language', $user->ID) == 'Mandarin' ) { ?>checked="checked"<?php }?> value="Mandarin" /> Mandarin<br />
    

    Also, the usermeta is dealing but your are checking for $_POST['gender']

    Finally, you should have one usermeta for English and other for Mandarin, as they are not mutually exlcusive

    [edit: working code]
    [edit2: multiple languages]

    <?php
    $lingo = array('en' => 'English', 'md' => '普通話', 'es' => 'Español', 'fr' => 'Français', 'pt' => 'Português');
    
    function my_user_field( $user ) {
        $gender = get_the_author_meta( 'dealing', $user->ID);
        $company = esc_attr( get_the_author_meta( 'company', $user->ID ) );
    ?>
        <h3><?php _e('More About You'); ?></h3>
        <table class="form-table">
            <tr>
                <th>
                    <label for="Dealing Type"><?php _e('Gender'); ?>
                </label></th>
                <td><span class="description"><?php _e('Gender?'); ?></span><br>
                <label><input type="radio" name="dealing" <?php if ($gender == 'Male' ) { ?>checked="checked"<?php }?> value="Male">Male<br /></label>
                <label><input type="radio" name="dealing" <?php if ($gender == 'Female' ) { ?>checked="checked"<?php }?> value="Female">Female<br /></label>
    
                </td>
            </tr>
            <tr>
                <th>
                    <label for="company"><?php _e('Company'); ?>
                </label></th>
                <td>
                  <span class="description"><?php _e('Insert Your Company name'); ?></span><br>
                    <input type="text" name="company" id="company" value="<?php echo $company; ?>" class="regular-text" /><br />
                </td>
            </tr>
            <tr>
                <th>
                    <?php _e('Language'); ?>
                </th>
                <td><?php
                    global $lingo;
                    foreach($lingo as $key => $value) {
                        $code = 'language_'.$key;
                        $lang = get_the_author_meta( $code, $user->ID);
                         ?>
                        <label><input type="checkbox" name="<?php echo $code; ?>" <?php if ($lang == 'yes' ) { ?>checked="checked"<?php }?> value="yes" /> <?php echo $value; ?></label><br />
                    <?php }
                ?>
                </td>
            </tr>
        </table>
    <?php 
    }
    
    
    function my_save_custom_user_profile_fields( $user_id ) {
        if ( !current_user_can( 'edit_user', $user_id ) )
            return FALSE;
    
        update_usermeta( $user_id, 'dealing', $_POST['dealing'] );
        update_usermeta( $user_id, 'company', $_POST['company'] );
    
        global $lingo;
        foreach($lingo as $key => $value) {
            $code = "language_".$key;
            update_usermeta( $user_id, $code, $_POST[$code] );
        }
    }
    
    add_action( 'show_user_profile', 'my_user_field' );
    add_action( 'edit_user_profile', 'my_user_field' );
    add_action( 'personal_options_update', 'my_save_custom_user_profile_fields' );
    add_action( 'edit_user_profile_update', 'my_save_custom_user_profile_fields' );