File: /home/ukqcurpj/www/wp-content/plugins/paid-memberships-pro/shortcodes/membership.php
<?php
/*
Shortcode to hide/show content based on membership level
*/
function pmpro_shortcode_membership($atts, $content=null, $code="")
{
// $atts ::= array of attributes
// $content ::= text within enclosing form of shortcode element
// $code ::= the shortcode found, when == callback name
// examples: [membership level="3"]...[/membership]
extract(shortcode_atts(array(
'level' => NULL,
'levels' => NULL,
'delay' => NULL,
'show_noaccess' => NULL
), $atts));
//if levels is used instead of level
if(isset($levels) && !isset($level))
$level = $levels;
global $wpdb, $current_user;
//guilty until proven innocent :)
$hasaccess = false;
//figure out which level/levels to check
if(!empty($level) || $level === "0" || $level === 0)
{
//they specified a level(s)
if(strpos($level, ","))
{
//they specified many levels
$levels = explode(",", $level);
}
else
{
//they specified just one level
$levels = array($level);
}
}
else
{
//didn't specify a membership level, so use false so pmpro_hasMembershipLevel checks for any level
$levels = false;
}
//check their level
if(pmpro_hasMembershipLevel($levels))
$hasaccess = true;
//is there a delay?
if($hasaccess && !empty($delay))
{
//okay, this post requires membership. start by getting the user's startdate
if(!empty($levels))
$sqlQuery = "SELECT UNIX_TIMESTAMP(CONVERT_TZ(startdate, '+00:00', @@global.time_zone)) FROM $wpdb->pmpro_memberships_users WHERE status = 'active' AND membership_id IN(" . implode(",", array_map( 'intval', $levels ) ) . ") AND user_id = '" . esc_sql( $current_user->ID ) . "' ORDER BY id LIMIT 1";
else
$sqlQuery = "SELECT UNIX_TIMESTAMP(CONVERT_TZ(startdate, '+00:00', @@global.time_zone)) FROM $wpdb->pmpro_memberships_users WHERE status = 'active' AND user_id = '" . esc_sql( $current_user->ID ) . "' ORDER BY id LIMIT 1";
$startdate = $wpdb->get_var($sqlQuery);
//adjust start date to 12AM
$startdate = strtotime(date_i18n("Y-m-d", $startdate));
if(empty($startdate))
{
//user doesn't have an active membership level
$hasaccess = false;
}
else
{
//how many days has this user been a member?
$now = current_time('timestamp');
$days = ($now - $startdate)/3600/24;
if($days < intval($delay))
$hasaccess = false; //they haven't been around long enough yet
}
}
/**
* Legacy filter to change the access to the content for the [membership] shortcode. Use the
* pmpro_has_membership_level filter instead.
*
* @deprecated 3.4.3
*/
$hasaccess = apply_filters_deprecated( 'pmpro_member_shortcode_access',
array( $hasaccess, $content, $levels, $delay ), '3.4.3', 'pmpro_has_membership_level' );
//to show or not to show
if($hasaccess)
return do_shortcode($content); //show content
else {
if ( empty( $show_noaccess ) ) {
return '';
} else {
$content = '';
return pmpro_get_no_access_message( $content, $levels );
}
}
}
add_shortcode("membership", "pmpro_shortcode_membership");