Adding Custom User Profile data based upon Categories

Based upon the code found here: How To Add Custom Form Fields To The User Profile Page?

How Could I alter this so that users could check one of several boxes based upon categories I have setup in the blog.

Read More

E.g. If I have categories:

Apples
Oranges
Bananas

Id like these to appear in the User Profile area with a checkbox next to each so that a user can select which fruit they like best.

Related posts

Leave a Reply

1 comment

  1. here is an example

    //create the user category fields
    add_action( 'show_user_profile', 'add_user_categories' );
    add_action( 'edit_user_profile', 'add_user_categories' );
    
    function add_user_categories($user ){
        ?>
        <table class="form-table">
        <tr>
            <th><label for="user_categories"><?php _e("User categories"); ?></label></th>
            <td>
                <?php
                    $data = get_the_author_meta( 'user_categories', $user->ID );
                    $args = array( 'hide_empty' =>0, 'taxonomy'=> 'category');
                    $categories=  get_categories($args);
                    if ($categories){
                        foreach ( $categories as $category ){ 
                            if(in_array($category->term_id,(array)$data)) {
                                $selected = 'checked="checked""';
                            } else {
                                $selected = '';
                            }
                            echo '<input name="user_categories[]" value="'.$category->term_id.'" '.$selected.' type="checkbox"/>'.$category->name.'<br/>';
                        }
                    }
                ?>
            </td>
        </tr>
        </table>
        <?php
    }
    
    //save the user category fields 
    add_action( 'personal_options_update', 'save_user_categories' );
    add_action( 'edit_user_profile_update', 'save_user_categories' );
    
    function save_user_categories( $user_id ){
        if ( !current_user_can( 'edit_user', $user_id ) ) { return false; }
        update_usermeta( $user_id, 'user_categories', $_POST['user_categories'] );
    }
    

    and go get the stored data just use:

    $data = get_the_author_meta( 'user_categories', $user->ID );
    

    and $data will be an array with all of the categories the user has selected.