Skip to content

Instantly share code, notes, and snippets.

@pbrocks
Created June 11, 2018 06:31
Show Gist options
  • Save pbrocks/af7e530a0425adb89de7f3de387f88c1 to your computer and use it in GitHub Desktop.
Save pbrocks/af7e530a0425adb89de7f3de387f88c1 to your computer and use it in GitHub Desktop.
Using this recipe, you can easily customize your membership account page by replacing the [pmpro_account] with [pmpro-neato-account-page]. To select to show only certain sections, add the sections to the shortcode, as in [pmpro-neato-account-page sections="membership,profile"/]
<?php
/**
* Create a custom shortcode to show membership account information
*
* Add this code to your PMPro Customizations Plugin - For more info on this visit:
* https://www.paidmembershipspro.com/create-a-plugin-for-pmpro-customizations/
*/
function pmpro_shortcode_account_customized( $atts, $content = null, $code = '' ) {
global $wpdb, $pmpro_msg, $pmpro_msgt, $pmpro_levels, $current_user, $levels;
// $atts ::= array of attributes
// $content ::= text within enclosing form of shortcode element
// $code ::= the shortcode found, when == callback name
// examples: [pmpro-neato-account-page] [pmpro-neato-account-page sections="membership,profile"/]
extract(
shortcode_atts(
array(
'section' => '',
'sections' => 'membership,profile,invoices,links',
), $atts
)
);
// did they use 'section' instead of 'sections'?
if ( ! empty( $section ) ) {
$sections = $section;
}
// turn into an array
$sections = explode( ',', $sections );
ob_start();
// if a member is logged in, show them some info here (1. past invoices. 2. billing information with button to update.)
if ( pmpro_hasMembershipLevel() ) {
$ssorder = new MemberOrder();
$ssorder->getLastMemberOrder();
$invoices = $wpdb->get_results( "SELECT *, UNIX_TIMESTAMP(timestamp) as timestamp FROM $wpdb->pmpro_membership_orders WHERE user_id = '$current_user->ID' ORDER BY timestamp DESC LIMIT 6" );
?>
<div id="pmpro_account">
<?php if ( in_array( 'membership', $sections ) || in_array( 'memberships', $sections ) ) { ?>
<div id="pmpro_account-membership" class="pmpro_box">
<h3><?php _e( 'Neato Memberships YO!!', 'paid-memberships-pro' ); ?></h3>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<thead>
<tr>
<th><?php _e( 'Neato Level', 'paid-memberships-pro' ); ?></th>
<th><?php _e( 'Neato Billing', 'paid-memberships-pro' ); ?></th>
<th><?php _e( 'Neato Expiration', 'paid-memberships-pro' ); ?></th>
</tr>
</thead>
<tbody>
<?php
// TODO: v2.0 will loop through levels here
$level = $current_user->membership_level;
?>
<tr>
<td class="pmpro_account-membership-levelname">
<?php echo $current_user->membership_level->name; ?>
<div class="pmpro_actionlinks">
<?php do_action( 'pmpro_member_action_links_before' ); ?>
<?php
/*
<?php if( $current_user->membership_level->allow_signups && pmpro_isLevelExpiringSoon( $current_user->membership_level) ) { ?>
<a href="<?php echo pmpro_url("checkout", "?level=" . $current_user->membership_level->id, "https")?>"><?php _e("Renew", "pmpro");?></a>
<?php } ?>
<?php if((isset($ssorder->status) && $ssorder->status == "success") && (isset($ssorder->gateway) && in_array($ssorder->gateway, array("authorizenet", "paypal", "stripe", "braintree", "payflow", "cybersource")))) { ?>
<a href="<?php echo pmpro_url("billing", "", "https")?>"><?php _e("Update Billing Info", "pmpro"); ?></a>
<?php } ?>
<?php
//To do: Only show CHANGE link if this level is in a group that has upgrade/downgrade rules
if(count($pmpro_levels) > 1 && !defined("PMPRO_DEFAULT_LEVEL")) { ?>
<a href="<?php echo pmpro_url("levels")?>"><?php _e("Change", "pmpro");?></a>
<?php } ?>
<a href="<?php echo pmpro_url("cancel", "?level=" . $current_user->membership_level->id)?>"><?php _e("Cancel", "pmpro");?></a>
*/
?>
<a href="http://www.disneyworld.com">Neato Very Own Link</a>
<?php do_action( 'pmpro_member_action_links_after' ); ?>
</div> <!-- end pmpro_actionlinks -->
</td>
<td class="pmpro_account-membership-levelfee">
<p><?php echo pmpro_getLevelCost( $level, true, true ); ?></p>
</td>
<td class="pmpro_account-membership-expiration">
<?php
if ( $current_user->membership_level->enddate ) {
echo date( get_option( 'date_format' ), $current_user->membership_level->enddate );
} else {
echo '---';
}
?>
</td>
</tr>
</tbody>
</table>
<?php // Todo: If there are multiple levels defined that aren't all in the same group defined as upgrades/downgrades ?>
<div class="pmpro_actionlinks">
<a href="<?php echo pmpro_url( 'levels' ); ?>"><?php _e( 'View all Membership Options', 'paid-memberships-pro' ); ?></a>
</div>
</div> <!-- end pmpro_account-membership -->
<?php } ?>
<?php if ( in_array( 'profile', $sections ) ) { ?>
<div id="pmpro_account-profile" class="pmpro_box">
<?php wp_get_current_user(); ?>
<h3><?php _e( 'Neato Account', 'paid-memberships-pro' ); ?></h3>
<?php if ( $current_user->user_firstname ) { ?>
<p><?php echo $current_user->user_firstname; ?> <?php echo $current_user->user_lastname; ?></p>
<?php } ?>
<ul>
<?php do_action( 'pmpro_account_bullets_top' ); ?>
<li><strong><?php _e( 'Neato Username', 'paid-memberships-pro' ); ?>:</strong> <?php echo $current_user->user_login; ?></li>
<li><strong><?php _e( 'Neato Email', 'paid-memberships-pro' ); ?>:</strong> <?php echo $current_user->user_email; ?></li>
<?php do_action( 'pmpro_account_bullets_bottom' ); ?>
</ul>
<div class="pmpro_actionlinks">
<a href="<?php echo admin_url( 'profile.php' ); ?>"><?php _e( 'Edit Profile', 'paid-memberships-pro' ); ?></a>
<a href="<?php echo admin_url( 'profile.php' ); ?>"><?php _e( 'Change Password', 'paid-memberships-pro' ); ?></a>
</div>
</div> <!-- end pmpro_account-profile -->
<?php } ?>
<?php if ( in_array( 'invoices', $sections ) && ! empty( $invoices ) ) { ?>
<div id="pmpro_account-invoices" class="pmpro_box">
<h3><?php _e( 'Neato Past Invoices', 'paid-memberships-pro' ); ?></h3>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<thead>
<tr>
<th><?php _e( 'Neato Date', 'paid-memberships-pro' ); ?></th>
<th><?php _e( 'Neato Level', 'paid-memberships-pro' ); ?></th>
<th><?php _e( 'Neato Amount', 'paid-memberships-pro' ); ?></th>
</tr>
</thead>
<tbody>
<?php
$count = 0;
foreach ( $invoices as $invoice ) {
if ( $count++ > 4 ) {
break;
}
// get an member order object
$invoice_id = $invoice->id;
$invoice = new MemberOrder();
$invoice->getMemberOrderByID( $invoice_id );
$invoice->getMembershipLevel();
?>
<tr id="pmpro_account-invoice-<?php echo $invoice->code; ?>">
<td><a href="<?php echo pmpro_url( 'invoice', '?invoice=' . $invoice->code ); ?>"><?php echo date( get_option( 'date_format' ), $invoice->timestamp ); ?></td>
<td>
<?php
if ( ! empty( $invoice->membership_level ) ) {
echo $invoice->membership_level->name;
} else {
echo __( 'N/A', 'paid-memberships-pro' );
}
?>
</td>
<td><?php echo pmpro_formatPrice( $invoice->total ); ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
<?php if ( $count == 6 ) { ?>
<div class="pmpro_actionlinks"><a href="<?php echo pmpro_url( 'invoice' ); ?>"><?php _e( 'View All Invoices', 'paid-memberships-pro' ); ?></a></div>
<?php } ?>
</div> <!-- end pmpro_account-invoices -->
<?php } ?>
<?php if ( in_array( 'links', $sections ) && ( has_filter( 'pmpro_member_links_top' ) || has_filter( 'pmpro_member_links_bottom' ) ) ) { ?>
<div id="pmpro_account-links" class="pmpro_box">
<h3><?php _e( 'Neato Member Links', 'paid-memberships-pro' ); ?></h3>
<ul>
<?php
do_action( 'pmpro_member_links_top' );
?>
<?php
do_action( 'pmpro_member_links_bottom' );
?>
</ul>
</div> <!-- end pmpro_account-links -->
<?php } ?>
</div> <!-- end pmpro_account -->
<?php
}
$content = ob_get_contents();
ob_end_clean();
return $content;
}
add_shortcode( 'pmpro-neato-account-page', 'pmpro_shortcode_account_customized' );
add_action( 'pmpro_member_links_bottom', 'pmpro_member_links_bottom_echo' );
function pmpro_member_links_bottom_echo() {
echo '<h3>pmpro_member_links_bottom_echo</h3>';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment