i have been working on a custom system for my site where users can have a seperate account, setting and profile page to make my site a bit more interactive and community type. with some other additional stuff.
I am new to coding, i have managed to make the profile pages etc.
Right now i am stuck in adding a check box list of tags to user settings page. where a user can select multiple tags as interest.. so i can use those to show him recommended posts randomly on his account page .
i was able to add two extra fields (Twitter/facebook) in the settings page with this code :
function add_bkmrks_contactmethod( $bcontactmethods ) {
$bcontactmethods['Twitter'] = 'Twitter';
$bcontactmethods['Facebook'] = 'Facebook';
return $bcontactmethods;
}
add_filter('user_contactmethods','add_bkmrks_contactmethod',10,1);
and tehse can be easily called on pages as well by using $userinfo->Twitter etc. but i have no clue about the checkboxlist… and calling the array etc.
If you guys came across any article or chunk of code which can help me get this resolved i wil be thankful 🙂
cheers
Ayaz
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Justin Tadlock has a good tutorial to get you started:
http://justintadlock.com/archives/2009/09/10/adding-and-using-custom-user-profile-fields
There are some specifics to dealing with checkboxes however, and some custom code if you want to make checkboxes that correspond to tags/categories.
To generate the form fields and save the data use the following snippet:
<?php
function user_interests_fields( $user ) {
// get product categories
$tags = get_terms('post_tag', array('hide_empty' => false));
$user_tags = get_the_author_meta( 'user_interests', $user->ID );
?>
<table class="form-table">
<tr>
<th>My interests:</th>
<td>
<?php
if ( count( $tags ) ) {
foreach( $tags as $tag ) { ?>
<p><label for="user_interests_<?php echo esc_attr( $tag->slug); ?>">
<input
id="user_interests_<?php echo esc_attr( $tag->slug); ?>"
name="user_interests[<?php echo esc_attr( $tag->term_id ); ?>]"
type="checkbox"
value="<?php echo esc_attr( $tag->term_id ); ?>"
<?php if ( in_array( $tag->term_id, $user_tags ) ) echo ' checked="checked"'; ?> />
<?php echo esc_html($tag->name); ?>
</label></p><?php
}
} ?>
</td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'user_interests_fields' );
add_action( 'edit_user_profile', 'user_interests_fields' );
// store interests
function user_interests_fields_save( $user_id ) {
if ( !current_user_can( 'edit_user', $user_id ) )
return false;
update_user_meta( $user_id, 'user_interests', $_POST['user_interests'] );
}
add_action( 'personal_options_update', 'user_interests_fields_save' );
add_action( 'edit_user_profile_update', 'user_interests_fields_save' );
?>
You can then call the get_the_author_meta() function to get at your array of tag IDs which can then be used in a query eg:
query_posts( array( 'tag_id' => get_the_author_meta( 'user_interests', $user_id ) ) );
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0