includes/template-tags.php
<?php/** * LSX Health Plan Template Tags. * * @package lsx-health-plan */ /** * Outputs the workout box on the single plan page.** @return void*/function lsx_health_plan_workout_box() { if ( ! post_type_exists( 'workout' ) ) { return; } $intro_text = \lsx_health_plan\functions\get_option( 'workout_intro', false ); ?> <div class="workout-instructions"> <div class="row"> <div class="col-md-12"> <?php if ( false !== $intro_text ) { ?> <div class="excerpt"> <p><?php echo wp_kses_post( wpautop( $intro_text ) ); ?></p> </div> <?php } else { ?> <div class="content-intro"> <h3><?php esc_html_e( "Don't forget your warm up!", 'lsx-health-plan' ); ?></h3> <p><?php esc_html_e( 'Be sure to do the warm-up before every workout session.', 'lsx-health-plan' ); ?></p> </div> <?php } ?> </div> </div> </div><?php} /** * Outputs the meal plan box on the single plan page.** @return void*/function lsx_health_plan_meal_box() { if ( ! post_type_exists( 'meal' ) ) { return; } ?> <div class="col-md-4" > <div class="lsx-health-plan-box"> <h3 class="title meal-plan-title title-lined"><?php esc_html_e( 'Your Meal Plan', 'lsx-health-plan' ); ?><?php lsx_get_svg_icon( 'meal.svg' ); ?></h3> <div class="spacer"></div> <?php $intro_text = \lsx_health_plan\functions\get_option( 'meal_plan_intro', false ); if ( false !== $intro_text ) { ?> <div class="excerpt"> <p><?php echo wp_kses_post( $intro_text ); ?></p> </div> <?php } $meal = \lsx_health_plan\functions\get_option( 'endpoint_meal', false ); if ( false === $meal ) { $meal = 'meal'; } ?> <a href="<?php the_permalink(); ?><?php echo esc_attr( $meal ); ?>/" class="btn"><?php esc_html_e( 'View your meal plan', 'lsx-health-plan' ); ?></a> </div> </div><?php} /** * Outputs the recipe box on the single plan page.** @return void*/function lsx_health_plan_recipe_box() { if ( ! post_type_exists( 'recipe' ) ) { return; } ?> <div class="col-md-4" > <div class="lsx-health-plan-box"> <h3 class="title recipes-title title-lined"><?php esc_html_e( 'Recipes', 'lsx-health-plan' ); ?><?php lsx_get_svg_icon( 'recipes.svg' ); ?></h3> <div class="spacer"></div> <?php $intro_text = \lsx_health_plan\functions\get_option( 'recipes_intro', false ); if ( false !== $intro_text ) { ?> <div class="excerpt"> <p><?php echo wp_kses_post( $intro_text ); ?></p> </div> <?php } $recipes = \lsx_health_plan\functions\get_option( 'endpoint_recipe', false ); if ( false === $recipes ) { $recipes = 'recipes'; } ?> <a href="<?php the_permalink(); ?><?php echo esc_attr( $recipes ); ?>/" class="btn"><?php esc_html_e( 'View all recipes', 'lsx-health-plan' ); ?></a> </div> </div><?php} /** * Outputs the downloads box on the single plan page.** @return void*/function lsx_health_plan_downloads_box() { global $current_user; ?> <div class="col-md-4 day-download-box" > <div class="lsx-health-plan-box"> <h3 class="title downloads-title title-lined"><?php esc_html_e( 'Downloads', 'lsx-health-plan' ); ?><?php lsx_get_svg_icon( 'download.svg' ); ?></h3> <div class="spacer"></div> <div class="download-list"> <ul> <?php $downloads = \lsx_health_plan\functions\get_downloads(); if ( ! empty( $downloads ) ) { foreach ( $downloads as $download ) { echo wp_kses_post( '<li><a href=""><i class="fa fa-file-pdf"></i>' . do_shortcode( '[download id="' . $download . '"]' ) . '</a></li>' ); } } ?> </ul> </div> </div> </div><?php} /** * outputs the dynamic classes for the nav tabs. * * @param string $tab * @return void */function lsx_health_plan_nav_class( $tab = '' ) { $nav_classes = array(); if ( function_exists( 'is_wc_endpoint_url' ) && 'edit-account' === $tab && is_wc_endpoint_url( 'edit-account' ) ) { $nav_classes[] = 'active'; } elseif ( lsx_health_plan_is_current_tab( $tab ) ) { $nav_classes[] = 'active'; } if ( ! empty( $nav_classes ) ) { echo wp_kses_post( implode( ' ', $nav_classes ) ); }} /** * Outputs the my profile tabs * * @return void */function lsx_health_plan_my_profile_tabs() { ?> <div id="account-nav"> <ul class="nav nav-pills"> <li class=" <?php if ( ( function_exists( 'is_wc_endpoint_url' ) && ! is_wc_endpoint_url( 'edit-account' ) ) || ! function_exists( 'is_wc_endpoint_url' ) ) { echo esc_attr( 'active' ); } ?> "><a class="my-plan-tab" href="<?php the_permalink(); ?>"><?php esc_html_e( 'My Plans', 'lsx-health-plan' ); ?></a></li> <?php if ( function_exists( 'WC' ) ) { ?> <li class=" <?php if ( function_exists( 'is_wc_endpoint_url' ) && is_wc_endpoint_url( 'edit-account' ) ) { echo esc_attr( 'active' ); } ?> "><a class="account-details-tab" href="<?php the_permalink(); ?>edit-account/"><?php esc_html_e( 'Account Details', 'lsx-health-plan' ); ?></a></li> <?php } if ( is_user_logged_in() ) { ?> <li class=""><a class="logout-tab" href="<?php echo esc_url( wp_logout_url( get_permalink() ) ); ?>"><?php esc_html_e( 'Logout', 'lsx-health-plan' ); ?></a></li> <?php } ?> </ul> </div> <?php} /** * Outputs the my profile box * * @return void */Function `lsx_health_plan_my_profile_box` has a Cognitive Complexity of 65 (exceeds 25 allowed). Consider refactoring.function lsx_health_plan_my_profile_box() { ?> <div class="lsx-health-plan my-profile-block wp-block-cover alignfull"> <div class="wp-block-cover__inner-container"> <h2><?php esc_html_e( 'My Dashboard', 'lsx-health-plan' ); ?></h2> <?php if ( ( function_exists( 'WC' ) || class_exists( 'WP_User_Avatar_Setup' ) ) && is_user_logged_in() ) { ?> <section id="dashboard-card"> <?php if ( function_exists( 'WC' ) || class_exists( 'WP_User_Avatar_Setup' ) ) { ?> <div class="profile-navigation"> <div class="profile-photo"> <?php global $current_user; if ( function_exists( 'WC' ) ) { get_current_user(); } if ( class_exists( 'WP_User_Avatar_Setup' ) ) { echo get_avatar( $current_user->ID, 240 ); } ?> </div> </div> <?php } ?> <?php if ( function_exists( 'WC' ) ) { ?> <div class="profile-details"> <h1 class="title-lined has-text-color"><?php echo esc_html( $current_user->display_name ); ?></h1> <?php $disable_stats = \lsx_health_plan\functions\get_option( 'disable_all_stats', false ); if ( 'on' !== $disable_stats && function_exists( 'WC' ) ) { $is_weight_disabled = \lsx_health_plan\functions\get_option( 'disable_weight_checkbox', false ); $is_height_disabled = \lsx_health_plan\functions\get_option( 'disable_height_checkbox', false ); $is_waist_disabled = \lsx_health_plan\functions\get_option( 'disable_waist_checkbox', false ); $is_bmi_disabled = \lsx_health_plan\functions\get_option( 'disable_bmi_checkbox', false ); $weight = get_user_meta( get_current_user_id(), 'weight', true ); $waist = get_user_meta( get_current_user_id(), 'waist', true ); $height = get_user_meta( get_current_user_id(), 'height', true ); $height_m = 0; if ( is_numeric( $height ) ) { $height_m = $height / 100; } if ( 1 < $weight && 1 < $height_m ) { $bmi = $weight / ( $height_m * $height_m ); $bmi = number_format( $bmi, 1 ); } else { $bmi = __( 'Add more data', 'lsx-health-plan' ); } ?> <div> <?php if ( 'on' !== $is_weight_disabled ) { ?> <span><strong><?php esc_html_e( 'Weight:', 'lsx-health-plan' ); ?></strong> <?php if ( '' !== $weight ) { echo wp_kses_post( $weight . ' kg' ); } else { echo '/'; } ?> </span> <?php } if ( 'on' !== $is_waist_disabled ) { ?> <span><strong><?php esc_html_e( 'Waist:', 'lsx-health-plan' ); ?></strong> <?php if ( '' !== $waist ) { echo wp_kses_post( $waist . ' cm' ); } else { echo '/'; } ?> </span> <?php } if ( 'on' !== $is_bmi_disabled ) { ?> <span><strong><?php esc_html_e( 'BMI:', 'lsx-health-plan' ); ?></strong> <?php if ( '' !== $bmi ) { echo wp_kses_post( $bmi ); } else { echo '/'; } ?> </span> <?php } ?> </div> <?php } // Only display the edit account link if woocommerce is active. if ( function_exists( 'WC' ) ) { ?> <div class="edit-profile"> <?php if ( function_exists( 'wc_get_page_id' ) ) { $url_id = wc_get_page_id( 'myaccount' ); } else { $url_id = ''; } ?> <a href="<?php echo esc_url( get_permalink( $url_id ) ); ?>edit-account/"><?php esc_html_e( 'Edit', 'lsx-health-plan' ); ?></a> </div> <?php } ?> </div> <?php } ?> </section> <?php } ?> </div> </div> <?php} /** * Outputs the my profile list of plans box * * @return void */Function `lsx_health_plan_all_plans_block` has a Cognitive Complexity of 37 (exceeds 25 allowed). Consider refactoring.function lsx_health_plan_all_plans_block() { global $post, $product; // If this is the my plan page, and the user is logged out, show to WC login. $plan_slug = \lsx_health_plan\functions\get_option( 'my_plan_slug', false ); if ( function_exists( 'is_wc_endpoint_url' ) && false !== $plan_slug && is_page( $plan_slug ) && ! is_user_logged_in() ) { echo wp_kses_post( '<div id="edit-account-tab"><div class="edit-account-section">' ); echo wp_kses_post( '<h2 class="title-lined my-plan"></h2>' ); echo do_shortcode( '[woocommerce_my_account]' ); echo wp_kses_post( '</div></div>' ); return; } $args = array( 'orderby' => 'menu_order', 'order' => 'ASC', 'post_type' => 'plan', 'nopagin' => true, 'post_parent' => 0, ); if ( function_exists( '\lsx_health_plan\functions\woocommerce\get_membership_products' ) ) { $product_ids = \lsx_health_plan\functions\woocommerce\get_membership_products(); if ( ! empty( $product_ids ) ) { $args['meta_query'] = array( 'relation' => 'OR', array( 'key' => '_plan_product_id', 'value' => $product_ids, 'compare' => 'IN', ), array( 'key' => '_plan_product_id', 'compare' => 'NOT EXISTS', ), ); } } $the_query = new WP_Query( $args ); ?> <div class="all-plans-block plan-grid block-all-plans-block"> <div class="row"> <?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); lsx_entry_before(); $completed_class = ''; $linked_product = false; $restricted = false; $product = null; if ( function_exists( 'lsx_health_plan\functions\woocommerce\plan_has_products' ) && \lsx_health_plan\functions\woocommerce\plan_has_products() ) { $products = \lsx_health_plan\functions\woocommerce\get_plan_products(); $linked_product = wc_get_product( $products[0] ); $product = $linked_product; } if ( function_exists( 'wc_memberships_is_post_content_restricted' ) ) { $restricted = wc_memberships_is_post_content_restricted( get_the_ID() ) && ! current_user_can( 'wc_memberships_view_restricted_post_content', get_the_ID() ); } if ( lsx_health_plan_is_plan_complete() ) { $completed_class = 'completed'; } $round_progress = ''; $completed_progress = '100'; if ( false === $restricted ) { $round_progress = round( \lsx_health_plan\functions\get_progress( get_the_ID() ), 0 ); } ?> <div class="col-xs-12 col-sm-6 col-md-4"> <article class="lsx-slot lsx-hp-shadow <?php echo esc_html( 'progress-') . $round_progress; ?>"> <div class="plan-feature-img"> <?php if ( (int)$completed_progress === (int)$round_progress ) { ?> <span class="featured-plan"><?php lsx_get_svg_icon( 'icon-completed.svg' ); ?></span> <?php } ?> <a href="<?php echo esc_url( get_permalink() ); ?>"> <?php $featured_image = get_the_post_thumbnail(); if ( ! empty( $featured_image ) && '' !== $featured_image ) { the_post_thumbnail( 'lsx-thumbnail', array( 'class' => 'aligncenter', ) ); } else { ?> <img loading="lazy" class="placeholder" src="<?php echo esc_attr( plugin_dir_url( __FILE__ ) . '../assets/images/placeholder.jpg' ); ?>"> <?php } ?> </a> </div> <div class="content-box plan-content-box"> <h3 class="plan id-<?php the_ID(); ?> <?php echo esc_attr( $completed_class ); ?>"><a href="<?php echo esc_url( get_permalink() ); ?>"><?php the_title(); ?></a></h3> <?php echo wp_kses_post( \lsx_health_plan\functions\hp_get_plan_type_meta( $post ) ); ?> <?php if ( false !== $linked_product && false !== $restricted ) { echo wp_kses_post( $linked_product->get_price_html() ); } ?> <div class="excerpt"> <?php if ( ! has_excerpt() ) { $content = wp_trim_words( get_the_content(), 20 ); $content = '<p>' . $content . '</pre>'; } else { $content = apply_filters( 'the_excerpt', get_the_excerpt() ); } echo wp_kses_post( $content ); ?> </div> <?php if ( false === $restricted ) { echo wp_kses_post( '<span class="progress"><progress class="bar" value="' . \lsx_health_plan\functions\get_progress( get_the_ID() ) . '" max="100"> ' . \lsx_health_plan\functions\get_progress( get_the_ID() ) . '% </progress><span>' . $round_progress . '%</span></span>' ); } ?> </div> </article> </div> <?php endwhile; ?> <?php endif; ?> </div> <?php wp_reset_postdata(); ?> </div> <?php} /** * Outputs the my profile day view box * * @return void */function lsx_health_plan_day_plan_block( $args = array() ) { $defaults = array( 'plan' => '', ); $args = wp_parse_args( $args, $defaults ); if ( isset( $args['plan'] ) && '' !== $args['plan'] && \lsx_health_plan\functions\plan\has_sections( $args['plan'] ) ) { $sections = \lsx_health_plan\functions\plan\get_sections(); ?> <div class="daily-plan-block day-grid"> <?php foreach ( $sections as $section_key => $section_values ) { $defaults = array( 'title' => __( 'Day', 'lsx-health-plan' ) . ' ' . ( $section_key + 1 ), ); $section_args = wp_parse_args( $section_values, $defaults ); $completed_class = ''; if ( lsx_health_plan_is_day_complete() ) { $completed_class = 'completed'; } ?> <a href="<?php echo esc_attr( \lsx_health_plan\functions\plan\get_permalink( $args['plan'], $section_args['title'] ) ); ?>" class="day id-<?php echo esc_attr( $section_key + 1 ); ?> <?php echo esc_attr( $completed_class ); ?>"> <div class="plan-content"><?php echo esc_attr( $section_args['title'] ); ?></div> </a> <?php } ?> </div> <?php }} /** * Outputs the my profile week view box * * @param array $args An array of arguments. * @return void */Function `lsx_health_plan_week_plan_block` has a Cognitive Complexity of 49 (exceeds 25 allowed). Consider refactoring.function lsx_health_plan_week_plan_block( $args = array() ) { $defaults = array( 'show_downloads' => false, 'plan' => '', ); $args = wp_parse_args( $args, $defaults ); if ( isset( $args['plan'] ) && '' !== $args['plan'] && \lsx_health_plan\functions\plan\has_sections( $args['plan'] ) ) { $groups = \lsx_health_plan\functions\plan\get_sections( true ); if ( ! empty( $groups ) ) { $counter = 1; $group_open = false; foreach ( $groups as $group_key => $sections ) { $collapse_class = ''; $group_title = \lsx_health_plan\functions\plan\get_group_title( $sections ); // Determine if the current week is complete. $day_ids = wp_list_pluck( $sections, 'title' ); if ( false === $group_open ) { if ( 1 === $counter && ! \lsx_health_plan\functions\is_week_complete( false, $day_ids, $group_title ) ) { $collapse_class = 'in'; $group_open = true; } elseif ( ! \lsx_health_plan\functions\is_week_complete( false, $day_ids, $group_title ) ) { $collapse_class = 'in'; $group_open = true; } } // Determine if there are any weekly downloads. $week_downloads_view = ''; if ( isset( $args['show_downloads'] ) && false !== $args['show_downloads'] ) { $weekly_downloads = \lsx_health_plan\functions\get_weekly_downloads( $group_key ); if ( ! empty( $weekly_downloads ) ) { $week_downloads_view = 'week-downloads-view-on'; } } ?> <div class="daily-plan-block week-grid"> <a href="#group-<?php echo esc_attr( $group_key ); ?>" data-toggle="collapse" class="week-title"><?php echo esc_attr( $group_title ); ?></a> <div id="group-<?php echo esc_attr( $group_key ); ?>" class="week-row collapse <?php echo esc_attr( $collapse_class ); ?>"> <div class="week-row-inner <?php echo esc_html( $week_downloads_view ); ?>"> <div class="week-meals-recipes-box"> <?php if ( ! empty( $week_downloads_view ) ) { ?> <h3 class="title"><?php lsx_get_svg_icon( 'daily-plan.svg' ); ?><?php echo esc_html_e( 'Plan', 'lsx-health-plan' ); ?></h3> <?php } ?> <div class="week-meals-recipes-box-inner"> <?php foreach ( $sections as $section_key => $section_values ) { $defaults = array( 'title' => __( 'Day', 'lsx-health-plan' ) . ' ' . ( $section_key + 1 ), ); $section_args = wp_parse_args( $section_values, $defaults ); $completed_class = ''; if ( lsx_health_plan_is_day_complete( $args['plan'], $section_args['title'] ) ) { $completed_class = 'completed'; } if ( $section_args['rest_day_enabled'] && ! $section_args['connected_meals'] ) { ?> <span class="day id-<?php echo esc_attr( $section_key + 1 ); ?> <?php echo esc_attr( $completed_class ); ?>"> <div class="plan-content"><?php echo esc_attr( $section_args['title'] ); ?></div> </span> <?php } else { ?> <a href="<?php echo esc_attr( \lsx_health_plan\functions\plan\get_permalink( $args['plan'], $section_args['title'] ) ); ?>" class="day id-<?php echo esc_attr( $section_key + 1 ); ?> <?php echo esc_attr( $completed_class ); ?>"> <div class="plan-content"><?php echo esc_attr( $section_args['title'] ); ?></div> </a> <?php } } ?> </div> </div> <?php if ( ! empty( $week_downloads_view ) ) { lsx_health_plan_weekly_downloads( $weekly_downloads ); } ?> </div> </div> </div> <?php } } }} /** * Outputs the weekly downloads box. * * @param array $weekly_downloads An array of the download ids. * @return void */function lsx_health_plan_weekly_downloads( $weekly_downloads = array() ) { if ( ! empty( $weekly_downloads ) ) { ?> <div class="week-download-box"> <h3 class="title"><?php lsx_get_svg_icon( 'download.svg' ); ?><?php echo esc_html_e( 'Downloads', 'lsx-health-plan' ); ?></h3> <ul class="week-download-box-list"> <?php foreach ( $weekly_downloads as $weekly_download ) { ?> <li><?php echo wp_kses_post( do_shortcode( '[download id="' . $weekly_download . '"]' ) ); ?></li> <?php } ?> </ul> </div> <?php }} /** * Outputs the featured items of any type shortcode (intended for exercises) * * @return void */function lsx_health_plan_items( $args = array() ) { global $shortcode_args; $shortcode_args = $args; include LSX_HEALTH_PLAN_PATH . '/templates/partials/shortcode-loop.php';} /** * Outputs the featured video shortcode * * @return void */function lsx_health_plan_featured_video_block() { if ( ! post_type_exists( 'video' ) ) { return; } include LSX_HEALTH_PLAN_PATH . '/templates/featured-videos.php';} /** * Outputs the featured recipes shortcode * * @return void */function lsx_health_plan_featured_recipes_block() { if ( ! post_type_exists( 'recipe' ) ) { return; } include LSX_HEALTH_PLAN_PATH . '/templates/featured-recipes.php';} /** * Outputs the featured tips shortcode * * @return void */function lsx_health_plan_featured_tips_block() { include LSX_HEALTH_PLAN_PATH . '/templates/featured-tips.php';} /** * Outputs the Health Plan Buttons * * @param string $button * @return void */function lsx_health_plan_day_button() { if ( lsx_health_plan_is_day_complete() ) { lsx_health_plan_unlock_button(); } else { lsx_health_plan_complete_button(); }} /** * Outputs the health plan complete button. * * @return void */function lsx_health_plan_complete_button() { ?> <div class="single-plan-inner-buttons"> <form action="<?php the_permalink(); ?>" method="post" class="form-complete-day complete-plan-btn"> <?php wp_nonce_field( 'complete', 'lsx-health-plan-actions' ); ?> <input type="hidden" name="lsx-health-plan-id" value="<?php echo esc_attr( \lsx_health_plan\functions\plan\generate_section_id() ); ?>" /> <button class="btn cta-btn" type="submit"><?php esc_html_e( 'Complete Day', 'lsx-health-plan' ); ?></button> </form> <?php lsx_health_plan_back_to_plan_button(); ?> </div> <?php} /** * Outputs the health plan unlock button. * * @return void */function lsx_health_plan_unlock_button() { ?> <div class="single-plan-inner-buttons"> <form action="<?php the_permalink(); ?>" method="post" class="form-complete-day complete-plan-btn"> <?php wp_nonce_field( 'unlock', 'lsx-health-plan-actions' ); ?> <input type="hidden" name="lsx-health-plan-id" value="<?php echo esc_attr( \lsx_health_plan\functions\plan\generate_section_id() ); ?>" /> <button class="btn secondary-btn" type="submit"><?php esc_html_e( 'Im not done!', 'lsx-health-plan' ); ?></button> </form> <?php lsx_health_plan_back_to_plan_button(); ?> </div> <?php} /** * Outputs the Single Plan Endpoint Tabs * * @param string $button * @return void */function lsx_health_plan_single_nav() { $tab_template_path = apply_filters( 'lsx_health_plan_single_nav_path', LSX_HEALTH_PLAN_PATH . '/templates/single-plan-tabs.php' ); if ( '' !== $tab_template_path ) { require $tab_template_path; }} /** * Outputs the Single Plan Tab based on the endpoint * * @param string $button * @return void */function lsx_health_plan_single_tabs() { $endpoint = get_query_var( 'endpoint' ); switch ( $endpoint ) { case 'meal': $tab_template_path = LSX_HEALTH_PLAN_PATH . '/templates/tab-content-meal.php'; break; case 'recipes': $tab_template_path = LSX_HEALTH_PLAN_PATH . '/templates/tab-content-recipes.php'; break; case 'workout': $tab_template_path = LSX_HEALTH_PLAN_PATH . '/templates/tab-content-workout.php'; break; case 'warm-up': $tab_template_path = LSX_HEALTH_PLAN_PATH . '/templates/tab-content-warm-up.php'; break; default: $tab_template_path = LSX_HEALTH_PLAN_PATH . '/templates/tab-content-plan.php'; break; } $tab_template_path = apply_filters( 'lsx_health_plan_single_tab_path', $tab_template_path ); if ( '' !== $tab_template_path ) { include $tab_template_path; }} /** * Outputs the recipe info on a table. * * @return void */function lsx_health_plan_recipe_data() { include LSX_HEALTH_PLAN_PATH . '/templates/table-recipe-data.php';} /** * Outputs the recipe type. * * @return recipe_type */function lsx_health_plan_recipe_type() { $term_obj_list = get_the_terms( get_the_ID(), 'recipe-type' ); $recipe_type = $term_obj_list[0]->name; if ( ! empty( $recipe_type ) ) { return $recipe_type; }} /** * Outputs the modal button and registers the video modal to show. * * @param int $m * @param array $group * @return void */function lsx_health_plan_workout_video_play_button( $m, $group, $echo = true ) { $workout_video = ''; $giphy = ''; $youtube = ''; if ( isset( $group['connected_videos'] ) && '' !== $group['connected_videos'] ) { $workout_video = $group['connected_videos']; $giphy = get_post_meta( $workout_video, 'video_giphy_source', true ); $youtube = esc_url( get_post_meta( $workout_video, 'video_youtube_source', 1 ) ); $content = get_post_field( 'post_content', $workout_video ); $play_button = '<button data-toggle="modal" data-target="#workout-video-modal-' . $workout_video . '"><span class="fa fa-play-circle"></span></button>'; $modal_body = ''; if ( ! empty( $giphy ) ) { $giphy = \lsx_health_plan\functions\get_video_url( $giphy ); $modal_body = $giphy; // WPCS: XSS OK. } elseif ( ! empty( $youtube ) ) { $modal_body = wp_oembed_get( $youtube, array( // WPCS: XSS OK. 'width' => 480, ) ); } $modal_body .= '<h5 class="modal-title title-lined">' . $group['name'] . '</h5>'; $modal_body .= $content; \lsx_health_plan\functions\register_modal( 'workout-video-modal-' . $workout_video, '', $modal_body ); if ( true === $echo ) { echo wp_kses_post( $play_button ); } else { return $play_button; } }} /** * Outputs the recipe description if it is included. * * @return void */function lsx_health_plan_recipe_archive_description() { $description = ''; if ( is_post_type_archive( 'recipe' ) ) { $description = \lsx_health_plan\functions\get_option( 'recipe_archive_description', '' ); } elseif ( is_post_type_archive( 'exercise' ) ) { $description = \lsx_health_plan\functions\get_option( 'exercise_archive_description', '' ); } elseif ( is_tax() ) { $description = get_the_archive_description(); } if ( '' !== $description ) { ?> <div class="lsx-hp-archive-description row"> <div class="col-xs-12 description-wrapper"><?php echo wp_kses_post( wpautop( $description ) ); ?></div> </div> <?php }} /** * Outputs the Single Plan Workout main content. * * @return void */function lsx_health_plan_workout_main_content() { // Getting translated endpoint. $workout = \lsx_health_plan\functions\get_option( 'endpoint_workout', 'workout' ); $connected_members = get_post_meta( get_the_ID(), ( $workout . '_connected_team_member' ), true ); $small_description = get_post_meta( get_the_ID(), ( $workout . '_short_description' ), true ); $content = ''; if ( $small_description || $connected_members || lsx_health_plan_has_tips() ) { $content .= '<div class="short-desc set-box set content-box entry-content">'; $content .= '<div class="the-content">'; $content .= lsx_hp_member_connected( $connected_members, $workout ); $content .= '<span>' . $small_description . '</span>'; $content .= '</div>'; $content .= do_shortcode( '[lsx_health_plan_featured_tips_block]' ); $content .= '</div>'; } return $content;} /** * Outputs the Single Plan Workout main content. * * @return void */function lsx_health_plan_meal_main_content() { // Getting translated endpoint. $meal = \lsx_health_plan\functions\get_option( 'endpoint_meal', 'meal' ); $connected_members = get_post_meta( get_the_ID(), ( $meal . '_connected_team_member' ), true ); $small_description = get_post_meta( get_the_ID(), ( $meal . '_short_description' ), true ); $content_meal = ''; if ( $small_description || $connected_members || lsx_health_plan_has_tips() ) { $content_meal .= '<div class="set-box set content-box entry-content">'; $content_meal .= '<div class="the-content">'; $content_meal .= lsx_hp_member_connected( $connected_members, $meal ); $content_meal .= '<span>' . $small_description . '</span>'; $content_meal .= '</div>'; $content_meal .= do_shortcode( '[lsx_health_plan_featured_tips_block]' ); $content_meal .= '</div>'; } return $content_meal;} /** * Outputs the Single Plan Workout Tab based on the layout selected. * * @param string $index * @return void */function lsx_health_plan_workout_tab_content( $index = 1 ) { global $group_name,$shortcode_args; $group_name = 'workout_section_' . $index; if ( false !== \lsx_health_plan\functions\get_option( 'exercise_enabled', false ) ) { $layout = strtolower( \lsx_health_plan\functions\get_option( 'workout_tab_layout', 'table' ) ); // Check for shortcode overrides. if ( null !== $shortcode_args && isset( $shortcode_args['layout'] ) ) { $layout = $shortcode_args['layout']; } } else { $layout = 'table'; } switch ( $layout ) { case 'list': $tab_template_path = LSX_HEALTH_PLAN_PATH . 'templates/partials/workout-list.php'; break; case 'grid': $tab_template_path = LSX_HEALTH_PLAN_PATH . 'templates/partials/workout-grid.php'; break; case 'table': $tab_template_path = LSX_HEALTH_PLAN_PATH . 'templates/partials/workout-table.php'; break; } $tab_template_path = apply_filters( 'lsx_health_plan_workout_tab_content_path', $tab_template_path ); if ( '' !== $tab_template_path ) { include $tab_template_path; }} /** * This will detect and include the Workout sets loop. * * @return void */function lsx_health_plan_workout_sets() { if ( is_singular( 'workout' ) ) { global $connected_workouts; $connected_workouts = array( get_the_ID() ); } if ( is_singular( 'plan' ) ) { global $connected_workouts; $section_key = get_query_var( 'section' ); if ( '' !== $section && \lsx_health_plan\functions\plan\has_sections() ) { $section_info = \lsx_health_plan\functions\plan\get_section_info( $section_key ); if ( isset( $section_info['connected_workouts'] ) && '' !== $section_info['connected_workouts'] ) { $connected_workouts = \lsx_health_plan\functions\prep_array( $section_info['connected_workouts'] ); } } } $template_path = LSX_HEALTH_PLAN_PATH . 'templates/partials/workout-sets.php'; $template_path = apply_filters( 'lsx_health_plan_workout_set_template_path', $template_path ); if ( '' !== $template_path && ! empty( $template_path ) ) { include $template_path; }} /** * This will detect and include the Warmup sets loop. * * @param [type] $connected_workouts * @return void */function lsx_health_plan_warmup_sets( $connected_workouts ) { $template_path = LSX_HEALTH_PLAN_PATH . 'templates/partials/workout-sets.php'; $template_path = apply_filters( 'lsx_health_plan_workout_set_template_path', $template_path ); if ( '' !== $template_path && ! empty( $template_path ) ) { include $template_path; }} /** * Outputs the recipes connected to the meal plan. * * @param array $args * @return void */function lsx_hp_meal_plan_recipes( $args = array() ) { $defaults = array( 'meal_id' => false, 'meal_time' => '', 'modal' => true, ); $args = wp_parse_args( $args, $defaults ); // Looking for recipes. $connected_recipes = get_post_meta( $args['meal_id'], $args['meal_time'] . '_recipes', true ); if ( ! empty( $connected_recipes ) ) { $query_args = array( 'orderby' => 'date', 'order' => 'DESC', 'post_type' => 'recipe', 'post__in' => $connected_recipes, ); $recipes = new WP_Query( $query_args ); ?> <div class="recipes"> <div class="row eating-row"> <?php if ( $recipes->have_posts() ) { while ( $recipes->have_posts() ) { $recipes->the_post(); if ( false !== $args['modal'] ) { \lsx_health_plan\functions\recipes\register_recipe_modal(); } ?> <div class="recipe-column"> <a data-toggle="modal" data-target="#recipe-modal-<?php echo esc_attr( get_the_ID() ); ?>" href="#recipe-modal-<?php echo esc_attr( get_the_ID() ); ?>" class="recipe-box box-shadow"> <div class="recipe-feature-img"> <?php $featured_image = get_the_post_thumbnail(); if ( ! empty( $featured_image ) && '' !== $featured_image ) { the_post_thumbnail( 'lsx-thumbnail-square', array( 'class' => 'aligncenter', ) ); } else { ?> <img loading="lazy" class="placeholder" src="<?php echo esc_attr( plugin_dir_url( __DIR__ ) . 'assets/images/placeholder.jpg' ); ?>"> <?php } ?> </div> <div class="recipe-content"> <h3 class="recipe-title"><?php the_title(); ?></h3> <?php lsx_health_plan_recipe_data(); ?> </div> </a> </div> <?php } } wp_reset_postdata(); ?> </div> </div> <?php }} /** * Output the connected. */function lsx_hp_recipe_plan_meta( $args = array() ) { $defaults = array(); $top_level_plans = array(); // Get meals this exercise is connected to. $plans = get_post_meta( get_the_ID(), 'connected_plans', true ); if ( ! empty( $plans ) ) { $plan = end( $plans ); $has_parent = wp_get_post_parent_id( $plan ); if ( 0 === $has_parent ) { $top_level_plans[] = $plan; } elseif ( false !== $top_level_plans ) { $top_level_plans[] = $has_parent; } } if ( ! empty( $top_level_plans ) && ( '' !== $top_level_plans ) ) { $top_level_plans = array_unique( $top_level_plans ); $top_level_plan = end( $top_level_plans ); ?> <span class="recipe-type recipe-parent"><?php echo esc_html( get_the_title( $top_level_plan ) ); ?></span> <?php }} /** * Output the connected. */function lsx_hp_exercise_plan_meta() { $top_level_plans = array(); // Get workouts this exercise is connected to. $workouts = get_post_meta( get_the_ID(), 'connected_workouts', true ); if ( '' !== $workouts && ! is_array( $workouts ) ) { $workouts = array( $workouts ); } if ( ! empty( $workouts ) ) { foreach ( $workouts as $workout ) { // Get the plans this workout is connected to. $plans = get_post_meta( $workout, 'connected_plans', true ); if ( '' !== $plans && ! is_array( $plans ) ) { $plans = array( $plans ); } if ( ! empty( $plans ) ) { foreach ( $plans as $plan ) { $has_parent = wp_get_post_parent_id( $plan ); if ( 0 === $has_parent ) { $top_level_plans = $plan; } else { $top_level_plans = $has_parent; } } } } } if ( ! empty( $top_level_plans ) && ( '' !== $top_level_plans ) ) { $top_level_plans = array_unique( $top_level_plans ); $top_level_plan = end( $top_level_plans ); ?> <span class="recipe-type recipe-parent"><?php echo esc_html( get_the_title( $top_level_plan ) ); ?></span> <?php }} /** * Template for related content box for all singles. * * @param [type] $related_content * @return void */function lsx_hp_single_related( $related_content, $post_type_text ) { ?> <section id="lsx-hp-related"> <div class="row lsx-related-posts lsx-related-posts-title"> <div class="col-xs-12"> <h2 class="lsx-related-posts-headline"><?php echo esc_html( $post_type_text ); ?></h2> </div> </div> <div class="row lsx-related-posts lsx-related-posts-content"> <div class="col-xs-12"> <div class="lsx-related-posts-wrapper"> <?php $i = 0; foreach ( $related_content as $article ) { $post_title = get_the_title( $article ); $post_categories = wp_get_post_categories( $article ); $post_link = get_permalink( $article ); $cats = array(); ?> <article id="post-<?php echo esc_html( $article ); ?>" class="lsx-slot post"> <div class="entry-layout lsx-hp-shadow"> <div class="entry-layout-content"> <header class="entry-header"> <div class="entry-image"> <a href="<?php echo esc_url( $post_link ); ?>" class="thumbnail"> <?php $featured_image = get_the_post_thumbnail( $article, 'lsx-thumbnail-wide' ); if ( ! empty( $featured_image ) && '' !== $featured_image ) { echo wp_kses_post( $featured_image ); } else { ?> <img loading="lazy" class="placeholder" src="<?php echo esc_attr( plugin_dir_url( __FILE__ ) . '../assets/images/placeholder.jpg' ); ?>"> <?php } ?> </a> </div> <div class="entry-meta"> <?php foreach ( $post_categories as $c ) { $cat = get_category( $c ); /* Translators: %s: category name */ $cats[] = '<a href="' . esc_url( get_category_link( $cat->term_id ) ) . '" title="' . sprintf( esc_html__( 'Posts in %s', 'lsx-blog-customizer' ), $cat->name ) . '">' . $cat->name . '</a>'; } if ( ! empty( $cats ) ) { ?> <div class="post-categories"><span></span><?php echo wp_kses_post( implode( ', ', $cats ) ); ?></div> <?php } ?> </div> <h2 class="entry-title"> <a href="<?php echo esc_url( $post_link ); ?>"> <?php echo esc_html( $post_title ); ?> </a> </h2> </header> </div> </div> </article> <?php if (++$i === 3) break; } ?> </div> </div> </div> </section> <?php} /** * Template for connected members. * * @param [type] $connected_members * @return void */function lsx_hp_member_connected( $connected_members, $post_type ) { if ( ! empty( $connected_members ) ) { $content = '<div id="hp-connected-members" class="hp-connected-members connected-' . $post_type . '">'; foreach ( $connected_members as $member ) { $post_link = get_permalink( $member ); $member_name = get_the_title( $member ); $member_name = '<span class="lsx-team-name">' . $member_name . '</span>'; $member_link = '<a href="' . $post_link . '" >' . $member_name . '</a>'; $roles = ''; $terms = get_the_terms( $member, 'team_role' ); if ( $terms && ! is_wp_error( $terms ) ) { $roles = array(); foreach ( $terms as $term ) { $roles[] = $term->name; } $roles = join( ', ', $roles ); } $member_roles = '' !== $roles ? "<small class='lsx-team-roles'>$roles</small>" : ''; $content .= '<p>' . $member_roles . ': ' . $member_link . '</p>'; } $content .= '</div>'; return $content; }}