function save() { parent::save(); $course_permalink = $_POST['learn_press_course_base']; if ($course_permalink == 'custom') { // Get permalink without slashes $course_permalink = trim($_POST['course_permalink_structure'], '/'); // This is an invalid base structure and breaks pages if ('%course_category%' == $course_permalink) { $course_permalink = _x('courses', 'slug', 'learn_press') . '/' . $course_permalink; } // Prepending slash $course_permalink = '/' . $course_permalink; } elseif (empty($course_permalink)) { $course_permalink = false; } $course_base = untrailingslashit($course_permalink); update_option('learn_press_course_base', $course_base); // Shop base may require verbose page rules if nesting pages $courses_page_id = learn_press_get_page_id('courses'); $courses_permalink = $courses_page_id > 0 && get_post($courses_page_id) ? get_page_uri($courses_page_id) : _x('courses', 'default-slug', 'learn_press'); if ($courses_page_id && trim($course_base, '/') === $courses_permalink) { update_option('learn_press_use_verbose_page_rules', 'yes'); } else { delete_option('learn_press_use_verbose_page_rules'); } }
/** * Register course post type */ function register_post_type() { $labels = array('name' => _x('Courses', 'Post Type General Name', 'learn_press'), 'singular_name' => _x('Course', 'Post Type Singular Name', 'learn_press'), 'menu_name' => __('Courses', 'learn_press'), 'parent_item_colon' => __('Parent Item:', 'learn_press'), 'all_items' => __('Courses', 'learn_press'), 'view_item' => __('View Course', 'learn_press'), 'add_new_item' => __('Add New Course', 'learn_press'), 'add_new' => __('Add New', 'learn_press'), 'edit_item' => __('Edit Course', 'learn_press'), 'update_item' => __('Update Course', 'learn_press'), 'search_items' => __('Search Course', 'learn_press'), 'not_found' => __('No course found', 'learn_press'), 'not_found_in_trash' => __('No course found in Trash', 'learn_press')); $args = array('labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'has_archive' => ($page_id = learn_press_get_page_id('courses')) && get_post($page_id) ? get_page_uri($page_id) : 'courses', 'capability_type' => LPR_COURSE_CPT, 'map_meta_cap' => true, 'show_in_menu' => 'learn_press', 'show_in_admin_bar' => true, 'show_in_nav_menus' => true, 'taxonomies' => array('course_category', 'course_tag'), 'supports' => array('title', 'editor', 'thumbnail', 'revisions', 'comments', 'author'), 'hierarchical' => true, 'rewrite' => array('slug' => 'courses', 'hierarchical' => true, 'with_front' => false)); register_post_type(LPR_COURSE_CPT, $args); register_taxonomy('course_category', array(LPR_COURSE_CPT), array('label' => __('Course Categories', 'learn_press'), 'labels' => array('name' => __('Course Categories', 'learn_press'), 'menu_name' => __('Category', 'learn_press'), 'singular_name' => __('Category', 'learn_press'), 'add_new_item' => __('Add New Course Category', 'learn_press'), 'all_items' => __('All Categories', 'learn_press')), 'query_var' => true, 'public' => true, 'hierarchical' => true, 'show_ui' => true, 'show_in_menu' => 'learn_press', 'show_admin_column' => true, 'show_in_admin_bar' => true, 'show_in_nav_menus' => true, 'rewrite' => array('slug' => 'course_category', 'hierarchical' => true, 'with_front' => false))); register_taxonomy('course_tag', array(LPR_COURSE_CPT), array('labels' => array('name' => __('Course Tags', 'learn_press'), 'singular_name' => __('Tag', 'learn_press'), 'search_items' => __('Search Course Tags'), 'popular_items' => __('Popular Course Tags'), 'all_items' => __('All Course Tags'), 'parent_item' => null, 'parent_item_colon' => null, 'edit_item' => __('Edit Course Tag'), 'update_item' => __('Update Course Tag'), 'add_new_item' => __('Add New Course Tag'), 'new_item_name' => __('New Course Tag Name'), 'separate_items_with_commas' => __('Separate tags with commas'), 'add_or_remove_items' => __('Add or remove tags'), 'choose_from_most_used' => __('Choose from the most used tags'), 'menu_name' => __('Tags')), 'public' => true, 'hierarchical' => false, 'show_ui' => true, 'show_in_menu' => 'learn_press', 'update_count_callback' => '_update_post_term_count', 'query_var' => true)); if (!is_admin()) { LPR_Assets::enqueue_script('tipsy', LPR_PLUGIN_URL . '/assets/js/jquery.tipsy.js'); LPR_Assets::enqueue_style('tipsy', LPR_PLUGIN_URL . '/assets/css/tipsy.css'); } }
static function auto_shortcode($template) { if (is_page()) { global $post, $wp_query, $wp; $page_id = $wp_query->queried_object_id; if ($page_id == learn_press_get_page_id('checkout')) { if (!preg_match('/\\[learn_press_checkout\\s?(.*)\\]/', $post->post_content)) { $post->post_content .= '[learn_press_checkout]'; } } elseif ($page_id == learn_press_get_page_id('profile')) { if (empty($wp->query_vars['user'])) { $current_user = wp_get_current_user(); if (!empty($current_user->user_login)) { wp_redirect(learn_press_get_endpoint_url('', $current_user->user_login, learn_press_get_page_link('profile'))); die; } else { learn_press_404_page(); } } else { $query = array(); parse_str($wp->matched_query, $query); if ($query) { $profile_endpoints = (array) LP()->settings->get('profile_endpoints'); $endpoints = array_keys($profile_endpoints); foreach ($query as $k => $v) { if ($k == 'view') { if (!$v) { $v = reset($profile_endpoints); } if (!in_array($v, apply_filters('learn_press_profile_tab_endpoints', $profile_endpoints))) { learn_press_404_page(); } } if (!empty($v)) { $wp->query_vars[$k] = $v; } } } } if (!preg_match('/\\[learn_press_profile\\s?(.*)\\]/', $post->post_content)) { $post->post_content .= '[learn_press_profile]'; } } elseif ($page_id == learn_press_get_page_id('cart')) { if (!preg_match('/\\[learn_press_cart\\s?(.*)\\]/', $post->post_content)) { $post->post_content .= '[learn_press_cart]'; } } } return $template; }
/** * get confirm order URL * * @param int $order_id * @return string */ function learn_press_get_order_confirm_url($order_id = 0) { $url = ''; if (($confirm_page_id = learn_press_get_page_id('taken_course_confirm')) && get_post($confirm_page_id)) { $url = get_permalink($confirm_page_id); if ($order_id) { $url = join(preg_match('!\\?!', $url) ? '&' : '?', array($url, "order_id={$order_id}")); } } else { $order = new LPR_Order($order_id); if (($items = $order->get_items()) && !empty($items->products)) { $course = reset($items->products); $url = get_permalink($course['id']); } else { $url = get_site_url(); } } return $url; }
function save() { parent::save(); $course_permalink = $_POST['learn_press_course_base']; if ($course_permalink == 'custom') { $course_permalink = trim($_POST['course_permalink_structure'], '/'); if ('%course_category%' == $course_permalink) { $course_permalink = _x('courses', 'slug', 'learn_press') . '/' . $course_permalink; } $course_permalink = '/' . $course_permalink; } elseif (empty($course_permalink)) { $course_permalink = false; } $course_base = untrailingslashit($course_permalink); update_option('learn_press_course_base', $course_base); $courses_page_id = learn_press_get_page_id('courses'); $courses_permalink = $courses_page_id > 0 && get_post($courses_page_id) ? get_page_uri($courses_page_id) : _x('courses', 'default-slug', 'learn_press'); if ($courses_page_id && trim($course_base, '/') === $courses_permalink) { update_option('learn_press_use_verbose_page_rules', 'yes'); } else { delete_option('learn_press_use_verbose_page_rules'); } }
function learn_press_edit_admin_bar() { global $wp_admin_bar; if (($profile = learn_press_get_page_id('profile')) && get_post_type($profile) == 'page' && LP()->settings->get('admin_bar_link') == 'yes') { $text = LP()->settings->get('admin_bar_link_text'); $course_profile = array(); $course_profile['id'] = 'course_profile'; $course_profile['parent'] = 'user-actions'; $course_profile['title'] = $text ? $text : get_the_title($profile); $course_profile['href'] = learn_press_get_page_link('profile'); $course_profile['meta']['target'] = LP()->settings->get('admin_bar_link_target'); $wp_admin_bar->add_menu($course_profile); } $current_user = wp_get_current_user(); // add `be teacher` link if (in_array(LP()->teacher_role, $current_user->roles) || in_array('administrator', $current_user->roles)) { return; } //if ( !class_exists( 'LP_Admin_Settings' ) ) return; /** * $settings = LP_Admin_Settings::instance( 'general' ); * if ( $settings->get( 'instructor_registration' ) ) { * $be_teacher = array(); * $be_teacher['id'] = 'be_teacher'; * $be_teacher['parent'] = 'user-actions'; * $be_teacher['title'] = __( 'Become An Instructor', 'learn_press' ); * $be_teacher['href'] = '#'; * $wp_admin_bar->add_menu( $be_teacher ); * }*/ }
<?php $settings = LP()->settings; global $wp_post_types; if (!empty($wp_post_types[LP()->course_post_type])) { $course_type = $wp_post_types[LP()->course_post_type]; $default_courses_slug = $course_type->rewrite['slug']; } else { $default_courses_slug = ''; } $course_permalink = $settings->get('course_base'); $courses_page_id = learn_press_get_page_id('courses'); $base_slug = urldecode($courses_page_id > 0 && get_post($courses_page_id) ? get_page_uri($courses_page_id) : _x('courses', 'default-slug', 'learn_press')); $course_base = _x('course', 'default-slug', 'learn_press'); $structures = array(0 => array('value' => '', 'text' => __('Default', 'learn_press'), 'code' => esc_html(home_url()) . '/?lp_course=sample-course'), 1 => array('value' => '/' . trailingslashit($course_base), 'text' => __('Course', 'learn_press'), 'code' => esc_html(sprintf('%s/%s/sample-course/', home_url(), $course_base))), 2 => array('value' => '/' . trailingslashit($base_slug), 'text' => __('Courses base', 'learn_press'), 'code' => esc_html(sprintf('%s/%s/sample-course/', home_url(), $base_slug))), 3 => array('value' => '/' . trailingslashit($base_slug) . trailingslashit('%course_category%'), 'text' => __('Courses base with category', 'learn_press'), 'code' => esc_html(sprintf('%s/%s/course-category/sample-course/', home_url(), $base_slug)))); $is_custom = true; foreach ($structures as $k => $structure) { ?> <tr<?php if ($k == 2 || $k == 3) { echo ' class="learn-press-courses-page-id'; echo !$courses_page_id ? ' hide-if-js"' : '""'; } ?> > <th> <?php $is_checked = checked($course_permalink == '' && $structure['value'] == '' || $structure['value'] == trailingslashit($course_permalink), true, false); if ($is_custom && $is_checked) { $is_custom = false; }
function process_order_paypal_standard() { if (!empty($_REQUEST['learn-press-transaction-method']) && 'paypal-standard' == $_REQUEST['learn-press-transaction-method']) { // if we have a paypal-nonce in $_REQUEST that meaning user has clicked go back to our site after finished the transaction // so, create a new order if (!empty($_REQUEST['paypal-nonce']) && wp_verify_nonce($_REQUEST['paypal-nonce'], 'learn-press-paypal-nonce')) { if (!empty($_REQUEST['tx'])) { //if PDT is enabled $transaction_id = $_REQUEST['tx']; } else { if (!empty($_REQUEST['txn_id'])) { //if PDT is not enabled $transaction_id = $_REQUEST['txn_id']; } else { $transaction_id = NULL; } } if (!empty($_REQUEST['cm'])) { $transient_transaction_id = $_REQUEST['cm']; } else { if (!empty($_REQUEST['custom'])) { $transient_transaction_id = $_REQUEST['custom']; } else { $transient_transaction_id = NULL; } } if (!empty($_REQUEST['st'])) { //if PDT is enabled $transaction_status = $_REQUEST['st']; } else { if (!empty($_REQUEST['payment_status'])) { //if PDT is not enabled $transaction_status = $_REQUEST['payment_status']; } else { $transaction_status = NULL; } } if (!empty($transaction_id) && !empty($transient_transaction_id) && !empty($transaction_status)) { $user = learn_press_get_current_user(); try { //If the transient still exists, delete it and add the official transaction if ($transaction_object = learn_press_get_transient_transaction('lpps', $transient_transaction_id)) { learn_press_delete_transient_transaction('lpps', $transient_transaction_id); $order_id = $this->get_order_id($transaction_id); $order_id = learn_press_add_transaction(array('order_id' => $order_id, 'method' => 'paypal-standard', 'method_id' => $transaction_id, 'status' => $transaction_status, 'user_id' => $user->ID, 'transaction_object' => $transaction_object['transaction_object'])); wp_redirect(($confirm_page_id = learn_press_get_page_id('taken_course_confirm')) && get_post($confirm_page_id) ? learn_press_get_order_confirm_url($order_id) : get_site_url()); die; } } catch (Exception $e) { return false; } } else { if (is_null($transaction_id) && is_null($transient_transaction_id) && is_null($transaction_status)) { } } } } wp_redirect(get_site_url()); die; }
/** * Action when user press the "Take this course" button * * @param $course_id * @param string $payment_method */ function learn_press_take_course($course_id, $payment_method = '') { $user = learn_press_get_current_user(); $can_take_course = apply_filters('learn_press_before_take_course', true, $user->ID, $course_id, $payment_method); if ($can_take_course) { if (learn_press_is_free_course($course_id)) { if ($order_id = learn_press_add_transaction(array('method' => 'free', 'method_id' => '', 'status' => '', 'user_id' => $user->ID, 'transaction_object' => learn_press_generate_transaction_object()))) { learn_press_update_order_status($order_id, 'Completed'); learn_press_add_message('message', __('Congratulations! You have enrolled this course')); $json = array('result' => 'success', 'redirect' => ($confirm_page_id = learn_press_get_page_id('taken_course_confirm')) && get_post($confirm_page_id) ? learn_press_get_order_confirm_url($order_id) : get_permalink($course_id)); learn_press_send_json($json); } } else { if (has_filter('learn_press_take_course_' . $payment_method)) { $order = null; $result = apply_filters('learn_press_take_course_' . $payment_method, $order); $result = apply_filters('learn_press_payment_result', $result, $order); if (is_ajax()) { learn_press_send_json($result); exit; } else { wp_redirect($result['redirect']); exit; } } else { wp_die(__('Invalid payment method.', 'learn_press')); } } } else { learn_press_add_message('error', __('Sorry! You can not enroll to this course')); $json = array('result' => 'error', 'redirect' => get_permalink($course_id)); echo '<!--LPR_START-->' . json_encode($json) . '<!--LPR_END-->'; } }
function learn_press_template_redirect() { global $wp_query, $wp; // When default permalinks are enabled, redirect shop page to post type archive url if (!empty($_GET['page_id']) && get_option('permalink_structure') == "" && $_GET['page_id'] == learn_press_get_page_id('courses')) { wp_safe_redirect(get_post_type_archive_link('lp_course')); exit; } }
/** * Register course post type */ static function register_post_type() { $settings = LP_Settings::instance(); $labels = array('name' => _x('Courses', 'Post Type General Name', 'learn_press'), 'singular_name' => _x('Course', 'Post Type Singular Name', 'learn_press'), 'menu_name' => __('Courses', 'learn_press'), 'parent_item_colon' => __('Parent Item:', 'learn_press'), 'all_items' => __('Courses', 'learn_press'), 'view_item' => __('View Course', 'learn_press'), 'add_new_item' => __('Add New Course', 'learn_press'), 'add_new' => __('Add New', 'learn_press'), 'edit_item' => __('Edit Course', 'learn_press'), 'update_item' => __('Update Course', 'learn_press'), 'search_items' => __('Search Course', 'learn_press'), 'not_found' => sprintf(__('You have not got any course yet. Click <a href="%s">Add new</a> to start', 'learn_press'), admin_url('post-new.php?post_type=lp_course')), 'not_found_in_trash' => __('No course found in Trash', 'learn_press')); $course_permalink = empty($course_base = $settings->get('course_base')) ? _x('courses', 'slug', 'learn_press') : $course_base; $args = array('labels' => $labels, 'public' => true, 'query_var' => true, 'publicly_queryable' => true, 'show_ui' => true, 'has_archive' => ($page_id = learn_press_get_page_id('courses')) && get_post($page_id) ? get_page_uri($page_id) : 'course', 'capability_type' => LP_COURSE_CPT, 'map_meta_cap' => true, 'show_in_menu' => 'learn_press', 'show_in_admin_bar' => true, 'show_in_nav_menus' => true, 'taxonomies' => array('course_category', 'course_tag'), 'supports' => array('title', 'editor', 'thumbnail', 'revisions', 'comments', 'author'), 'hierarchical' => true, 'rewrite' => array('slug' => $course_permalink, 'hierarchical' => true, 'with_front' => false)); register_post_type(LP_COURSE_CPT, $args); register_taxonomy('course_category', array(LP_COURSE_CPT), array('label' => __('Course Categories', 'learn_press'), 'labels' => array('name' => __('Course Categories', 'learn_press'), 'menu_name' => __('Category', 'learn_press'), 'singular_name' => __('Category', 'learn_press'), 'add_new_item' => __('Add New Course Category', 'learn_press'), 'all_items' => __('All Categories', 'learn_press')), 'query_var' => true, 'public' => true, 'hierarchical' => true, 'show_ui' => true, 'show_in_menu' => 'learn_press', 'show_admin_column' => true, 'show_in_admin_bar' => true, 'show_in_nav_menus' => true, 'rewrite' => array('slug' => empty($category_base = $settings->get('course_category_base')) ? _x('course-category', 'slug', 'learn_press') : $category_base, 'hierarchical' => true, 'with_front' => false))); register_taxonomy('course_tag', array(LP_COURSE_CPT), array('labels' => array('name' => __('Course Tags', 'learn_press'), 'singular_name' => __('Tag', 'learn_press'), 'search_items' => __('Search Course Tags', 'learn_press'), 'popular_items' => __('Popular Course Tags', 'learn_press'), 'all_items' => __('All Course Tags', 'learn_press'), 'parent_item' => null, 'parent_item_colon' => null, 'edit_item' => __('Edit Course Tag', 'learn_press'), 'update_item' => __('Update Course Tag', 'learn_press'), 'add_new_item' => __('Add New Course Tag', 'learn_press'), 'new_item_name' => __('New Course Tag Name', 'learn_press'), 'separate_items_with_commas' => __('Separate tags with commas', 'learn_press'), 'add_or_remove_items' => __('Add or remove tags', 'learn_press'), 'choose_from_most_used' => __('Choose from the most used tags', 'learn_press'), 'menu_name' => __('Tags', 'learn_press')), 'public' => true, 'hierarchical' => false, 'show_ui' => true, 'show_in_menu' => 'learn_press', 'update_count_callback' => '_update_post_term_count', 'query_var' => true, 'rewrite' => array('slug' => empty($tag_base = $settings->get('course_tag_base')) ? _x('course-tag', 'slug', 'learn_press') : $tag_base, 'with_front' => false))); /*if ( !is_admin() ) { LP_Assets::enqueue_script( 'tipsy', LP_PLUGIN_URL . '/assets/js/jquery.tipsy.js' ); LP_Assets::enqueue_style( 'tipsy', LP_PLUGIN_URL . '/assets/css/tipsy.css' ); } flush_rewrite_rules();*/ }
/** * Return true if user is in checking out page * * @return bool */ function learn_press_is_checkout() { return is_page(learn_press_get_page_id('checkout')) || apply_filters('learn_press_is_checkout', false) ? true : false; }
/** * Controls WP displays the courses in a page which setup to display on homepage * * @param $q */ function learn_press_pre_get_posts($q) { // We only want to affect the main query if (!$q->is_main_query()) { return; } // Fix for verbose page rules if ($GLOBALS['wp_rewrite']->use_verbose_page_rules && isset($q->queried_object_id) && $q->queried_object_id === learn_press_get_page_id('courses')) { $q->set('post_type', 'lpr_course'); $q->set('page', ''); $q->set('pagename', ''); // Fix conditional Functions $q->is_archive = true; $q->is_post_type_archive = true; $q->is_singular = false; $q->is_page = false; } // Fix for endpoints on the homepage if ($q->is_home() && 'page' == get_option('show_on_front') && get_option('page_on_front') != $q->get('page_id')) { $_query = wp_parse_args($q->query); /*if ( ! empty( $_query ) && array_intersect( array_keys( $_query ), array_keys( $this->query_vars ) ) ) { $q->is_page = true; $q->is_home = false; $q->is_singular = true; $q->set( 'page_id', get_option('page_on_front') ); }*/ } // When orderby is set, WordPress shows posts. Get around that here. if ($q->is_home() && 'page' == get_option('show_on_front') && get_option('page_on_front') == learn_press_get_page_id('courses')) { $_query = wp_parse_args($q->query); if (empty($_query) || !array_diff(array_keys($_query), array('preview', 'page', 'paged', 'cpage', 'orderby'))) { $q->is_page = true; $q->is_home = false; $q->set('page_id', get_option('page_on_front')); $q->set('post_type', 'lpr_course'); } } if ($q->is_page() && 'page' == get_option('show_on_front') && $q->get('page_id') == learn_press_get_page_id('courses') && learn_press_get_page_id('courses')) { echo learn_press_get_page_id('courses'), ',', $q->get('page_id'); $q->set('post_type', 'lpr_course'); $q->set('page_id', ''); if (isset($q->query['paged'])) { $q->set('paged', $q->query['paged']); } global $wp_post_types; $course_page = get_post(learn_press_get_page_id('courses')); $wp_post_types['lpr_course']->ID = $course_page->ID; $wp_post_types['lpr_course']->post_title = $course_page->post_title; $wp_post_types['lpr_course']->post_name = $course_page->post_name; $wp_post_types['lpr_course']->post_type = $course_page->post_type; $wp_post_types['lpr_course']->ancestors = get_ancestors($course_page->ID, $course_page->post_type); $q->is_singular = false; $q->is_post_type_archive = true; $q->is_archive = true; $q->is_page = true; } elseif (!$q->is_post_type_archive('lpr_course') && !$q->is_tax(get_object_taxonomies('lpr_course'))) { return; } }
/** * Shop breadcrumb */ private function add_crumbs_courses() { if (get_option('page_on_front') == learn_press_get_page_id('courses')) { return; } $_name = learn_press_get_page_id('courses') ? get_the_title(learn_press_get_page_id('courses')) : ''; if (!$_name) { $product_post_type = get_post_type_object('product'); $_name = $product_post_type->labels->singular_name; } $this->add_crumb($_name, get_post_type_archive_link('lp_course')); }
function learn_press_pre_get_post($q) { if (is_admin()) { return $q; } global $post_type; if ($q->is_page() && ($q->get('page_id') == ($page_id = learn_press_get_page_id('courses')) && $page_id)) { $q->set('post_type', 'lpr_course'); $q->set('page_id', ''); if (isset($q->query['paged'])) { $q->set('paged', $q->query['paged']); } global $wp_post_types; $courses_page = get_post($page_id); $wp_post_types['lpr_course']->ID = $courses_page->ID; $wp_post_types['lpr_course']->post_title = $courses_page->post_title; $wp_post_types['lpr_course']->post_name = $courses_page->post_name; $wp_post_types['lpr_course']->post_type = $courses_page->post_type; $wp_post_types['lpr_course']->ancestors = get_ancestors($courses_page->ID, $courses_page->post_type); $q->is_singular = false; $q->is_post_type_archive = true; $q->is_archive = true; $q->is_page = true; } return $q; }