• Resolved chuyqwerty

    (@chuyqwerty)


    Hi I am trying to show the expiration of the date on a php page using a shortcode.
    I almost got it to work, but instead of giving me the numbers of days remaining, it gives me the total days for the subscription. Could you please help? I am sure its an easy fix to this code. Here is the code:

    add_shortcode( ‘m_count_down’, ‘m_count_down’ );
    function m_count_down( $attr ) {
    if ( class_exists( ‘Membership_Plugin’ ) ) {
    $subscription_id = isset( $attr[‘s_id’] ) ? $attr[‘s_id’] : 0;
    if ( ! is_user_logged_in() ) {
    return ”;
    }

    if ( $subscription_id == 0 ) {
    return ”;
    }

    if ( ! current_user_on_subscription( $subscription_id ) ) {
    return ”;
    }

    //get the current day left
    $subscription = new Membership_Model_Subscription( $subscription_id );
    ob_start();
    $now = strtotime( current_time( ‘mysql’ ) );
    $expires = ! empty( $start ) ? $start : $now;

    //get ordered subscription levels
    $levels = $subscription->get_levels();

    $tolevel_order = 1;
    $fromlevel_order = 1;
    foreach ( $levels as $level ) {
    if ( ! empty( $tolevel_id ) && $level->level_id == $tolevel_id ) {
    $tolevel_order = $level->level_order;
    continue;
    }
    if ( ! empty( $fromsub_id ) && ! empty( $fromlevel_id ) && $fromsub_id == $subscription->id && $level->level_id == $fromlevel_id ) {
    $fromlevel_order = $level->level_order;
    continue;
    }
    }

    //sum every level period to get the subscription end date.
    foreach ( $levels as $level ) {
    if ( $level->level_order < $tolevel_order ) {
    //if entering in the middle of a subscription, jumping beginning levels, those not count
    continue;
    }
    if ( ( $fromlevel_order < $tolevel_order ) && $level->level_order == $fromlevel_order ) {
    //reset to current date if already a subscription member and moving to another level
    $expires = $now;
    }
    switch ( $level->level_period_unit ) {
    case ‘d’:
    $period = ‘days’;
    break;
    case ‘w’:
    $period = ‘weeks’;
    break;
    case ‘m’:
    $period = ‘months’;
    break;
    case ‘y’:
    $period = ‘years’;
    break;
    }
    $expires = strtotime( ‘+’ . $level->level_period . ‘ ‘ . $period, $expires );

    if ( $level->sub_type == ‘indefinite’ ) {
    //never expires
    $expires = strtotime( ‘+10 years’, $expires );

    break;
    } elseif ( $level->sub_type == ‘serial’ ) {
    //sum only once and break – will not go to next level if exists
    break;
    }
    }
    $now = new DateTime( date( ‘Y-m-d’, time() ) );
    $expiry_date = new DateTime( date( ‘Y-m-d’, $expires ) );
    $day_left = $now->diff( $expiry_date );
    echo ‘Days left: ‘.$day_left->days.’ days’;
    $content = ob_get_contents();
    ob_end_clean();

    return $content;
    }
    }

    Thanks

    https://www.ads-software.com/plugins/membership/

Viewing 3 replies - 1 through 3 (of 3 total)
Viewing 3 replies - 1 through 3 (of 3 total)
  • The topic ‘Show Subscription Expiry Date’ is closed to new replies.