llms_update_300_create_access_plans()
Creates access plans for each course & membership
Description Description
Creates up to 3 plans per course and up to two plans per membership.
Migrates price & subscription data to a single & recurring plan where applicable.
If course is restricted to a membership a free members only plan will be created in addition to paid open recurring & single plans.
If course is restricted to a membership and no price is found only one free members only plan will be created.
Return Return
(void)
Source Source
File: includes/functions/updates/llms-functions-updates-300.php
function llms_update_300_create_access_plans() { $courses = new WP_Query( array( 'post_type' => array( 'course', 'llms_membership' ), 'posts_per_page' => -1, 'status' => 'any', ) ); if ( $courses->have_posts() ) { foreach ( $courses->posts as $post ) { $meta = get_post_meta( $post->ID ); $is_free = ( ! $meta['_price'][0] || floatval( 0 ) === floatval( $meta['_price'][0] ) ); $has_recurring = ( 1 == $meta['_llms_recurring_enabled'][0] ); if ( 'course' === $post->post_type ) { $members_only = ( 'on' === $meta['_llms_is_restricted'][0] && $meta['_llms_restricted_levels'][0] ); } else { $members_only = false; } // Base plan for single & recurring. $base_plan = array( 'access_expiration' => 'lifetime', 'availability' => 'open', 'availability_restrictions' => array(), 'content' => '', 'enroll_text' => ( 'course' === $post->post_type ) ? __( 'Enroll', 'lifterlms' ) : __( 'Join', 'lifterlms' ), 'featured' => 'no', 'frequency' => 0, 'is_free' => 'no', 'product_id' => $post->ID, 'sku' => $meta['_sku'][0], 'trial_offer' => 'no', ); $single = array_merge( array( 'price' => $meta['_price'][0], ), $base_plan ); $recurring = array_merge( array( 'price' => $meta['_llms_subscription_price'][0], ), $base_plan ); /** * Determine what kinds of plans to create */ // Free and members only, only available to members. if ( $is_free && $members_only ) { $free_members_only = true; $single_paid_open = false; $single_free_open = false; $recurring_paid = false; } elseif ( ! $is_free && $members_only ) { $free_members_only = true; $single_paid_open = true; $single_free_open = false; $recurring_paid = $has_recurring; } else { // No restrictions, normal settings apply. $free_members_only = false; $single_paid_open = ! $is_free ? true : false; $single_free_open = $is_free ? true : false; $recurring_paid = $has_recurring; } $order = 1; /** * CREATE THE PLANS */ if ( $free_members_only ) { $plan = $single; $plan['menu_order'] = $order; $plan['is_free'] = 'yes'; $plan['sku'] = ! empty( $plan['sku'] ) ? $plan['sku'] . '-membersonly' : ''; $plan['availability'] = 'members'; $plan['availability_restrictions'] = unserialize( $meta['_llms_restricted_levels'][0] ); $obj = new LLMS_Access_Plan( 'new', __( 'Members Only', 'lifterlms' ) ); foreach ( $plan as $key => $val ) { $obj->set( $key, $val ); } unset( $plan ); $order++; } if ( $single_paid_open ) { $plan = $single; $plan['menu_order'] = $order; $plan['sku'] = ! empty( $plan['sku'] ) ? $plan['sku'] . '-onetime' : ''; $plan['on_sale'] = ! empty( $meta['_sale_price'][0] ) ? 'yes' : 'no'; if ( 'yes' === $plan['on_sale'] ) { $plan['sale_end'] = ! empty( $meta['_sale_price_dates_to'][0] ) ? date( 'm/d/Y', strtotime( $meta['_sale_price_dates_to'][0] ) ) : ''; $plan['sale_start'] = ! empty( $meta['_sale_price_dates_from'][0] ) ? date( 'm/d/Y', strtotime( $meta['_sale_price_dates_from'][0] ) ) : ''; $plan['sale_price'] = $meta['_sale_price'][0]; } $obj = new LLMS_Access_Plan( 'new', __( 'One-Time Payment', 'lifterlms' ) ); foreach ( $plan as $key => $val ) { $obj->set( $key, $val ); } unset( $plan ); $order++; } if ( $single_free_open ) { $plan = $single; $plan['menu_order'] = $order; $plan['is_free'] = 'yes'; $plan['sku'] = ! empty( $plan['sku'] ) ? $plan['sku'] . '-free' : ''; $obj = new LLMS_Access_Plan( 'new', __( 'Free', 'lifterlms' ) ); foreach ( $plan as $key => $val ) { $obj->set( $key, $val ); } unset( $plan ); $order++; } if ( $recurring_paid ) { $plan = $recurring; $plan['menu_order'] = $order; $plan['sku'] = ! empty( $plan['sku'] ) ? $plan['sku'] . '-subscription' : ''; if ( isset( $meta['_llms_subscription_first_payment'][0] ) && $meta['_llms_subscription_first_payment'][0] != $meta['_llms_subscription_price'][0] ) { $plan['trial_offer'] = 'yes'; $plan['trial_length'] = $meta['_llms_billing_freq'][0]; $plan['trial_period'] = $meta['_llms_billing_period'][0]; $plan['trial_price'] = $meta['_llms_subscription_first_payment'][0]; } $plan['frequency'] = $meta['_llms_billing_freq'][0]; $plan['length'] = $meta['_llms_billing_cycle'][0]; $plan['period'] = $meta['_llms_billing_period'][0]; $obj = new LLMS_Access_Plan( 'new', __( 'Subscription', 'lifterlms' ) ); foreach ( $plan as $key => $val ) { $obj->set( $key, $val ); } unset( $plan ); $order++; } $keys = array( '_regular_price', '_price', '_sale_price', '_sale_price_dates_from', '_sale_price_dates_to', '_on_sale', '_llms_recurring_enabled', '_llms_subscription_price', '_llms_subscription_first_payment', '_llms_billing_period', '_llms_billing_freq', '_llms_billing_cycle', '_llms_subscriptions', '_sku', '_is_custom_single_price', '_custom_single_price_html', '_llms_is_restricted', '_llms_restricted_levels', '_llms_expiration_interval', '_llms_expiration_period', ); foreach ( $keys as $key ) { delete_post_meta( $post->ID, $key ); } } } }
Expand full source code Collapse full source code View on GitHub
Changelog Changelog
Version | Description |
---|---|
3.0.0 | Introduced. |