November 4, 2016

List site users and add custom fields to user profiles.

Wouldn’t it be nice to list all your authors and blog contributors on one page. And even have the control of filtering and displaying the key players, vs just the authors? Wouldn’t it be cool to have the person’s bio, and any associated links come up in that same list?

Here you go:

[pastacode lang=”php” manual=”%3C%3Fphp%20%0Aadd_action(%20’show_user_profile’%2C%20’my_show_extra_profile_fields’%20)%3B%0Aadd_action(%20’edit_user_profile’%2C%20’my_show_extra_profile_fields’%20)%3B%0A%0Afunction%20my_show_extra_profile_fields(%20%24user%20)%20%7B%20%3F%3E%0A%0A%09%3Ch3%3ELeadership%20(Meet%20Us)%20Section%3C%2Fh3%3E%0A%09%3Cp%3EThe%20following%20section%20is%20only%20for%20the%20senior%20leadership%20team.%20Leave%20it%20blank%20to%20reduce%20this%20profile’s%20prominence.%3C%2Fp%3E%0A%09%3Ctable%20class%3D%22form-table%22%3E%0A%0A%09%09%3Ctr%3E%0A%09%09%09%3Cth%3E%3Clabel%20for%3D%22job%22%3EJob%20Title%3C%2Flabel%3E%3C%2Fth%3E%0A%0A%09%09%09%3Ctd%3E%0A%09%09%09%09%3Cinput%20type%3D%22text%22%20name%3D%22job_title%22%20id%3D%22job_title%22%20value%3D%22%3C%3Fphp%20echo%20esc_attr(%20get_the_author_meta(%20’job_title’%2C%20%24user-%3EID%20)%20)%3B%20%3F%3E%22%20class%3D%22regular-text%22%20%2F%3E%3Cbr%20%2F%3E%0A%09%09%09%09%3Cspan%20class%3D%22description%22%3EPlease%20enter%20your%20Job%20Title.%3C%2Fspan%3E%0A%09%09%09%3C%2Ftd%3E%0A%09%09%3C%2Ftr%3E%0A%09%09%3Ctr%3E%0A%09%09%09%3Cth%3E%3Clabel%20for%3D%22job%22%3EOrder%3C%2Flabel%3E%3C%2Fth%3E%0A%0A%09%09%09%3Ctd%3E%0A%09%09%09%09%3Cinput%20type%3D%22text%22%20name%3D%22order_by%22%20id%3D%22order_by%22%20value%3D%22%3C%3Fphp%20echo%20esc_attr(%20get_the_author_meta(%20’order_by’%2C%20%24user-%3EID%20)%20)%3B%20%3F%3E%22%20class%3D%22regular-text%22%20%2F%3E%3Cbr%20%2F%3E%0A%09%09%09%09%3Cspan%20class%3D%22description%22%3EPlace%20users%20in%20order%20of%20this%20number.%3C%2Fspan%3E%0A%09%09%09%3C%2Ftd%3E%0A%09%09%3C%2Ftr%3E%0A%0A%09%3C%2Ftable%3E%0A%3C%3Fphp%20%7D%0Aadd_action(%20’personal_options_update’%2C%20’my_save_extra_profile_fields’%20)%3B%0Aadd_action(%20’edit_user_profile_update’%2C%20’my_save_extra_profile_fields’%20)%3B%0A%0Afunction%20my_save_extra_profile_fields(%20%24user_id%20)%20%7B%0A%0A%09if%20(%20!current_user_can(%20’edit_user’%2C%20%24user_id%20)%20)%0A%09%09return%20false%3B%0A%0A%09%2F*%20Copy%20and%20paste%20this%20line%20for%20additional%20fields.%20Make%20sure%20to%20change%20’twitter’%20to%20the%20field%20ID.%20*%2F%0A%09update_usermeta(%20%24user_id%2C%20’job_title’%2C%20%24_POST%5B’job_title’%5D%20)%3B%0A%09update_usermeta(%20%24user_id%2C%20’order_by’%2C%20%24_POST%5B’order_by’%5D%20)%3B%0A%7D%0A%3F%3E” message=”functions.php” highlight=”” provider=”manual”/]

[pastacode lang=”php” manual=”%3C%3Fphp%0A%20%20%2F*%20Template%20Name%3A%20Contributors%20Page%20*%2F%0A%3F%3E%0A%3C%3Fphp%20get_header()%3B%20%3F%3E%0A%3Csection%20class%3D%22cb-content%22%3E%0A%20%20%3Cdiv%20class%3D%22container-fluid%22%3E%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22row%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22cb-main%20col-sm-12%22%3E%0A%20%20%20%20%20%20%3C%3Fphp%20if%20(%20have_posts()%20)%20%3A%20%20%0A%20%20%20%20%20%20%20%20%20%20while%20(%20have_posts()%20)%20%3A%20the_post()%3B%20%0A%20%20%20%20%20%20%20%20%20%20get_template_part(%20’content’%2C’page’)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(%20comments_open()%20%7C%7C%20’0’%20!%3D%20get_comments_number()%20)%20%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20comments_template()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20endif%3B%0A%20%20%20%20%20%20%20%20%20%20endwhile%3B%20%0A%20%20%20%20%20%20%20%20%20%20endif%3B%20wp_reset_query()%3B%3F%3E%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%3C%2Fdiv%3E%20%20%0A%3C%2Fsection%3E%0A%0A%3Csection%20class%3D%22cb-content%22%3E%0A%20%20%3Cdiv%20class%3D%22container-fluid%22%3E%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22row%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22cb-main%20col-sm-12%22%3E%0A%20%20%20%20%20%20%20%20%0A%3C%3Fphp%0A%24args%20%3D%20array(‘fields’%20%3D%3E%20’all_with_meta’)%3B%0A%24blogusers%20%3D%20get_users(%24args)%3B%0A%2F%2F%20We’ll%20need%20a%20custom%20comparison%20function%20to%20order%20by%20the%20custom%20field%0A%2F%2Ffunction%20order_by(%24a%2C%20%24b)%7B%0A%20%20%2F%2Freturn%20(%24a-%3Eorder%20%3C%20%24b-%3Eorder)%20%3F%20-1%20%3A%201%3B%0A%2F%2F%7D%0A%2F%2F%20Sort%20using%20our%20custom%20comparison%20function%0A%2F%2Fusort(%24blogusers%2C%20%22order_by%22)%3B%0A%2F%2F%20Array%20of%20stdClass%20objects.%0Aecho%20’%3Cdiv%20id%3D%22leadership%22%3E’%3B%0Aforeach%20(%20%24blogusers%20as%20%24user%20)%20%7B%0A%20%20if(get_the_author_meta(%20’job_title’%2C%24user-%3Eid))%7B%0A%20%20echo%20’%3Cdiv%20class%3D%22profile%20leader%22%20data-sort%3D%22′.get_the_author_meta(%20’order_by’%2C%20%24user-%3EID%20).’%22%3E’.get_avatar(%20%24user%2C%20225%20)%3B%0A%20%20echo%20’%3Cdiv%20class%3D%22info%22%3E’%20.%20esc_html(%20%24user-%3Edisplay_name%20)%20.%20’%3A%3Cbr%3E%3Cspan%20class%3D%22title%22%3E’.get_the_author_meta(%20’job_title’%2C%24user-%3Eid).’%3C%2Fspan%3E%3C%2Fdiv%3E%3Cdiv%20class%3D%22description%22%3E’%20.%20esc_html(%20%24user-%3Edescription%20)%20.%20’%3C%2Fdiv%3E%3C%2Fdiv%3E’%3B%0A%7D%7D%3B%0Aecho%20’%3C%2Fdiv%3E%3Cdiv%20id%3D%22contributors%22%3E’%3B%0Aforeach%20(%20%24blogusers%20as%20%24user%20)%20%7B%0Aif(!get_the_author_meta(%20’job_title’%2C%24user-%3Eid))%7B%0A%20%20echo%20’%3Cdiv%20class%3D%22profile%20contributor%22%3E’.get_avatar(%20%24user%2C%20225%20)%3B%0A%20%20echo%20’%3Cdiv%20class%3D%22info%22%3E’%20.%20esc_html(%20%24user-%3Edisplay_name%20)%20.%20’%3C%2Fdiv%3E%3C%2Fdiv%3E’%3B%0A%7D%7D%3B%0Aecho%20’%3C%2Fdiv%3E’%3B%0A%3F%3E%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fsection%3E%0A%20%20%20%20%20%20%20%20%3Cdiv%20id%3D%22overlay%22%3E%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20id%3D%22modal%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22over-close%22%3EX%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22over-name%22%3E%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22over-desc%22%3E%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%3Cscript%3E%0A(function(%24)%20%7B%0A%20%20%24(‘.leader’).sort(sort_profiles).appendTo(‘%23leadership’)%3B%0A%20%20function%20sort_profiles(a%2Cb)%7B%0A%20%20%20%20return%20(%24(b).data(‘sort’))%20%3C%20(%24(a).data(‘sort’))%20%3F%201%20%3A%20-1%3B%0A%20%20%7D%0A%20%20%24(‘.leader’).on(‘click’%2Cfunction()%7B%0A%20%20%20%20var%20image%20%3D%20%24(this).children(‘img’).attr(‘src’)%3B%0A%20%20%20%20var%20oName%20%3D%20%24(this).children(‘.info’).html()%3B%0A%20%20%20%20var%20oDesc%20%3D%20%24(this).children(‘.description’).text()%3B%0A%20%20%20%20%24(‘%23modal%20img’).attr(‘src’%2Cimage)%3B%0A%20%20%20%20%24(‘%23modal%20.over-name’).html(oName)%3B%0A%20%20%20%20%24(‘%23modal%20.over-desc’).text(oDesc)%3B%0A%20%20%20%20%24(‘body’).addClass(‘oactive’)%3B%0A%20%20%7D)%3B%0A%20%20%24(‘.over-close’).on(‘click’%2Cfunction()%7B%0A%20%20%20%20%24(‘body’).removeClass(‘oactive’)%3B%0A%20%20%7D)%3B%0A%7D)(jQuery)%3B%0A%20%20%20%20%20%20%20%20%20%3C%2Fscript%3E%0A%3C%3Fphp%20get_footer()%3B%20%3F%3E” message=”page-whatever.php” highlight=”” provider=”manual”/]