Skip to content

Instantly share code, notes, and snippets.

@kimwhite
Forked from ipokkel/profile.php
Last active May 18, 2020 15:43
Show Gist options
  • Save kimwhite/bfe54e4291b422d2d09a671c30858e7f to your computer and use it in GitHub Desktop.
Save kimwhite/bfe54e4291b422d2d09a671c30858e7f to your computer and use it in GitHub Desktop.
Custom profile page template for PMPro Member Directory with an "Edit Profile" link for current user.
<?php
/*
Custom profile template for the PMPro Member Directory Add On version .6.1
Add "Edit Profile" link at the bottom of the member information - remove
if a member is viewing thier own profile.
Note: Custom templates may require review and updates with every plugin version update.
updated for Version 0.7 May 2020
To use this custom template,
create the following folders in your active theme directory:
{your-theme}/paid-memberships-pro/pmpro-member-directory/
and save this template as profile.php in this directory
*/
function pmpromd_profile_preheader()
{
global $post, $pmpro_pages, $current_user;
if(!empty($post->ID) && $post->ID == $pmpro_pages['profile'])
{
/*
Preheader operations here.
*/
global $main_post_id;
$main_post_id = $post->ID;
//Get the profile user
if(!empty($_REQUEST['pu']) && is_numeric($_REQUEST['pu']))
$pu = get_user_by('id', $_REQUEST['pu']);
elseif(!empty($_REQUEST['pu']))
$pu = get_user_by('slug', $_REQUEST['pu']);
elseif(!empty($current_user->ID))
$pu = $current_user;
else
$pu = false;
// Is this user hidden from directory?
$pmpromd_hide_directory = get_user_meta( $pu->ID, 'pmpromd_hide_directory', true );
// If no profile user, membership level, or hidden, go to directory or home.
if(empty($pu) || empty($pu->ID) || !pmpro_hasMembershipLevel(null, $pu->ID) || $pmpromd_hide_directory == '1' ) {
if(!empty($pmpro_pages['directory']))
wp_redirect(get_permalink($pmpro_pages['directory']));
else
wp_redirect(home_url());
exit;
}
// Integrate with Approvals.
if ( class_exists( 'PMPro_Approvals' ) ){
$status = PMPro_Approvals::getUserApprovalStatus( $pu->ID );
if ( ! empty( $status ) && $status != 'approved' ) {
if ( ! empty( $pmpro_pages['directory'] ) ) {
wp_redirect( get_permalink( $pmpro_pages['directory'] ) );
} else {
wp_redirect(home_url());
exit;
}
}
}
/*
If a level is required for the profile page, make sure the profile user has it.
*/
//check is levels are required
$levels = pmpro_getMatches("/ levels?=[\"']([^\"^']*)[\"']/", $post->post_content, true);
if(!empty($levels) && !pmpro_hasMembershipLevel(explode(",", $levels), $pu->ID))
{
if(!empty($pmpro_pages['directory']))
wp_redirect(get_permalink($pmpro_pages['directory']));
else
wp_redirect(home_url());
exit;
}
/*
Update the head title and H1
*/
function pmpromd_the_title($title, $post_id = NULL)
{
global $main_post_id, $current_user;
if($post_id == $main_post_id)
{
if(!empty($_REQUEST['pu']))
{
global $wpdb;
$user_nicename = $_REQUEST['pu'];
$display_name = $wpdb->get_var("SELECT display_name FROM $wpdb->users WHERE user_nicename = '" . esc_sql($user_nicename) . "' LIMIT 1");
}
elseif(!empty($current_user))
{
$display_name = $current_user->display_name;
}
if(!empty($display_name))
$title = $display_name;
}
return $title;
}
add_filter("the_title", "pmpromd_the_title", 10, 2);
function pmpromd_wp_title($title, $sep)
{
global $wpdb, $main_post_id, $post, $current_user;
if($post->ID == $main_post_id)
{
if(!empty($_REQUEST['pu']))
{
$user_nicename = $_REQUEST['pu'];
$display_name = $wpdb->get_var("SELECT display_name FROM $wpdb->users WHERE user_nicename = '" . esc_sql($user_nicename) . "' LIMIT 1");
}
elseif(!empty($current_user))
{
$display_name = $current_user->display_name;
}
if(!empty($display_name))
{
$title = $display_name . ' ' . $sep . ' ';
}
$title .= get_bloginfo( 'name' );
}
return $title;
}
add_filter("wp_title", "pmpromd_wp_title", 10, 2);
}
}
add_action("wp", "pmpromd_profile_preheader", 1);
function pmpromd_profile_shortcode($atts, $content=null, $code="")
{
// $atts ::= array of attributes
// $content ::= text within enclosing form of shortcode element
// $code ::= the shortcode found, when == callback name
// examples: [pmpro_member_profile avatar="false" email="false"]
extract(shortcode_atts(array(
'avatar_size' => '128',
'fields' => NULL,
'show_avatar' => true,
'show_bio' => true,
'show_billing' => true,
'show_email' => true,
'show_level' => true,
'show_name' => true,
'show_phone' => true,
'show_search' => true,
'show_startdate' => true,
'user_id' => NULL
), $atts));
global $current_user, $display_name, $wpdb, $pmpro_pages, $pmprorh_registration_fields;
//some page vars
if(!empty($pmpro_pages['directory']))
$directory_url = get_permalink($pmpro_pages['directory']);
else
$directory_url = "";
if(!empty($pmpro_pages['profile']))
$profile_url = get_permalink($pmpro_pages['profile']);
//turn 0's into falses
if($show_avatar === "0" || $show_avatar === "false" || $show_avatar === "no" || $show_avatar === false )
$show_avatar = false;
else
$show_avatar = true;
if($show_billing === "0" || $show_billing === "false" || $show_billing === "no" || $show_billing === false )
$show_billing = false;
else
$show_billing = true;
if($show_bio === "0" || $show_bio === "false" || $show_bio === "no" || $show_bio === false )
$show_bio = false;
else
$show_bio = true;
if($show_email === "0" || $show_email === "false" || $show_email === "no" || $show_email === false )
$show_email = false;
else
$show_email = true;
if($show_level === "0" || $show_level === "false" || $show_level === "no" || $show_level === false )
$show_level = false;
else
$show_level = true;
if($show_name === "0" || $show_name === "false" || $show_name === "no" || $show_name === false )
$show_name = false;
else
$show_name = true;
if($show_phone === "0" || $show_phone === "false" || $show_phone === "no" || $show_phone === false )
$show_phone = false;
else
$show_phone = true;
if($show_search === "0" || $show_search === "false" || $show_search === "no" || $show_search === false )
$show_search = false;
else
$show_search = true;
if($show_startdate === "0" || $show_startdate === "false" || $show_startdate === "no" || $show_startdate === false )
$show_startdate = false;
else
$show_startdate = true;
if(isset($_REQUEST['limit']))
$limit = intval($_REQUEST['limit']);
elseif(empty($limit))
$limit = 15;
if(empty($user_id) && !empty($_REQUEST['pu']))
{
//Get the profile user
if(is_numeric($_REQUEST['pu']))
$pu = get_user_by('id', $_REQUEST['pu']);
else
$pu = get_user_by('slug', $_REQUEST['pu']);
$user_id = $pu->ID;
}
if(!empty($user_id))
$pu = get_userdata($user_id);
elseif(empty($_REQUEST['pu']))
$pu = get_userdata($current_user->ID);
if ( ! empty( $pu ) ) {
$allmylevels = pmpro_getMembershipLevelsForUser( $pu->ID );
$membership_levels = array();
foreach ( $allmylevels as $curlevel ) {
$membership_levels[] = $curlevel->name;
}
$pu->membership_levels = implode(', ', $membership_levels);
}
ob_start();
?>
<?php if(!empty($show_search)) { ?>
<form action="<?php echo $directory_url; ?>" method="post" role="search" class="pmpro_member_directory_search search-form">
<label>
<span class="screen-reader-text"><?php _e('Search for:','label'); ?></span>
<input type="search" class="search-field" placeholder="<?php _e('Search Members','pmpromd'); ?>" name="ps" value="<?php if(!empty($_REQUEST['ps'])) echo esc_attr($_REQUEST['ps']);?>" title="<?php _e('Search Members','pmpromd'); ?>" />
<input type="hidden" name="limit" value="<?php echo esc_attr($limit);?>" />
</label>
<input type="submit" class="search-submit" value="<?php _e('Search Members','pmpromd'); ?>">
</form>
<?php } ?>
<?php
if(!empty($pu))
{
if(!empty($fields))
{
// Check to see if the Block Editor is used or the shortcode.
if ( strpos( $fields, "\n" ) !== FALSE ) {
$fields = rtrim( $fields, "\n" ); // clear up a stray \n
$fields_array = explode("\n", $fields); // For new block editor.
} else {
$fields = rtrim( $fields, ';' ); // clear up a stray ;
$fields_array = explode(";",$fields);
}
if(!empty($fields_array))
{
for($i = 0; $i < count($fields_array); $i++ )
$fields_array[$i] = explode(",", $fields_array[$i]);
}
}
else
$fields_array = false;
// Get Register Helper field options
$rh_fields = array();
if(!empty($pmprorh_registration_fields)) {
foreach($pmprorh_registration_fields as $location) {
foreach($location as $field) {
if(!empty($field->options)){
$rh_fields[$field->name] = $field->options;
}
}
}
}
?>
<div id="pmpro_member_profile-<?php echo $pu->ID; ?>" class="pmpro_member_profile">
<?php if(!empty($show_avatar)) { ?>
<p class="pmpro_member_directory_avatar">
<?php echo get_avatar($pu->ID, $avatar_size, NULL, $pu->display_name, array("class"=>"alignright")); ?>
</p>
<?php } ?>
<?php if(!empty($show_name) && !empty($pu->display_name) ) { ?>
<h2 class="pmpro_member_directory_name">
<?php echo $pu->display_name; ?>
</h2>
<?php } ?>
<?php if(!empty($show_bio) && !empty($pu->description) ) { ?>
<p class="pmpro_member_directory_bio">
<strong><?php _e('Biographical Info', 'pmpromd'); ?></strong>
<?php echo $pu->description; ?>
</p>
<?php } ?>
<?php if(!empty($show_email)) { ?>
<p class="pmpro_member_directory_email">
<strong><?php _e('Email Address', 'pmpromd'); ?></strong>
<?php echo $pu->user_email; ?>
</p>
<?php } ?>
<?php if(!empty($show_level)) { ?>
<p class="pmpro_member_directory_level">
<strong><?php _e('Level', 'pmpromd'); ?></strong>
<?php echo ! empty( $pu->membership_levels ) ? $pu->membership_levels : ''; ?>
</p>
<?php } ?>
<?php if(!empty($show_startdate)) { ?>
<p class="pmpro_member_directory_date">
<strong><?php _e('Start Date', 'pmpromd'); ?></strong>
<?php echo !empty( $pu->membership_level ) ? date(get_option("date_format"), $pu->membership_level->startdate) : ''; ?>
</p>
<?php } ?>
<?php if(!empty($show_billing) && !empty($pu->pmpro_baddress1)) { ?>
<p class="pmpro_member_directory_baddress">
<strong><?php _e('Address', 'pmpromd'); ?></strong>
<?php echo $pu->pmpro_baddress1; ?><br />
<?php
if(!empty($pu->pmpro_baddress2))
echo $pu->pmpro_baddress2 . "<br />";
?>
<?php if($pu->pmpro_bcity && $pu->pmpro_bstate) { ?>
<?php echo $pu->pmpro_bcity; ?>, <?php echo $pu->pmpro_bstate; ?> <?php echo $pu->pmpro_bzipcode; ?><br />
<?php echo $pu->pmpro_bcountry; ?><br />
<?php } ?>
</p>
<?php } ?>
<?php if(!empty($show_phone) && !empty($pu->pmpro_bphone)) { ?>
<p class="pmpro_member_directory_phone">
<strong><?php _e('Phone Number','pmpromd'); ?></strong>
<?php echo formatPhone($pu->pmpro_bphone); ?>
</p>
<?php } ?>
<?php
//filter the fields
$fields_array = apply_filters('pmpro_member_profile_fields', $fields_array, $pu);
if(!empty($fields_array))
{
foreach($fields_array as $field)
{
if(empty($field[0]))
break;
// Fix for a trailing space in the 'fields' shortcode attribute.
if ( $field[0] === ' ' ) {
break;
}
$field_val = $field[1];
$meta_field = $pu->$field_val;
if(!empty($meta_field))
{
?>
<p class="pmpro_member_directory_<?php echo esc_attr($field[1]); ?>">
<?php
if(is_array($meta_field) && !empty($meta_field['filename']) )
{
//this is a file field
?>
<strong><?php echo $field[0]; ?></strong>
<?php echo pmpromd_display_file_field($meta_field); ?>
<?php
}elseif(is_array($meta_field)){
//this is a general array, check for Register Helper options first
if(!empty($rh_fields[$field[1]])) {
foreach($meta_field as $key => $value)
$meta_field[$key] = $rh_fields[$field[1]][$value];
}
?>
<strong><?php echo $field[0]; ?></strong>
<?php echo implode(", ",$meta_field); ?>
<?php
}
elseif(!empty($rh_fields[$field[1]]) && is_array($rh_fields[$field[1]]) )
{
?>
<strong><?php echo $field[0]; ?></strong>
<?php echo $rh_fields[$field[1]][$meta_field]; ?>
<?php
}
else
{
if($field[1] == 'user_url')
{
?>
<a href="<?php echo esc_url($meta_field); ?>" target="_blank"><?php echo $field[0]; ?></a>
<?php
}
else
{
?>
<strong><?php echo $field[0]; ?></strong>
<?php
$meta_field_embed = wp_oembed_get($meta_field);
if(!empty($meta_field_embed)){
echo $meta_field_embed;
}else{
echo make_clickable($meta_field);
}
?>
<?php
}
}
?>
</p>
<?php
}
}
}
// Show edit profile link if current user
if ( $current_user->ID == $pu->ID ) {
?>
<a href="<?php echo get_edit_user_link(); ?>"><?php _e( 'Edit Profile', 'paid-memberships-pro' ); ?></a>
<?php
}
?>
<div class="pmpro_clear"></div>
</div>
<hr />
<?php if(!empty($directory_url)) { ?>
<div align="center"><a class="more-link" href="<?php echo $directory_url;?>"><?php _e('View All Members','pmpromd'); ?></a></div>
<?php } ?>
<?php
}
?>
<?php
$temp_content = ob_get_contents();
ob_end_clean();
return $temp_content;
}
add_shortcode("pmpro_member_profile", "pmpromd_profile_shortcode");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment