LLMS_Sidebars
LifterLMS Sidebars
Contents
Source Source
File: includes/class.llms.sidebars.php
class LLMS_Sidebars { /** * Static Constructor * * @since 3.0.0 */ public static function init() { // Replaces sidebars with course & lesson sidebars. add_filter( 'sidebars_widgets', array( __CLASS__, 'replace_default_sidebars' ) ); // Registers llms core sidebars. add_action( 'widgets_init', array( __CLASS__, 'register_sidebars' ), 5 ); // Custom actions for genesis. add_action( 'genesis_init', array( __CLASS__, 'genesis_support' ) ); } /** * Output course sidebar * * @since 3.0.0 * * @return void */ public static function do_course_sidebar() { if ( is_active_sidebar( 'llms_course_widgets_side' ) ) { dynamic_sidebar( 'llms_course_widgets_side' ); } } /** * Output lesson sidebar * * @since 3.0.0 * * @return void */ public static function do_lesson_sidebar() { if ( is_active_sidebar( 'llms_lesson_widgets_side' ) ) { dynamic_sidebar( 'llms_lesson_widgets_side' ); } } /** * Get the theme default sidebar that will be replaced by course and lesson sidebars * * @since 3.0.0 * @since 3.0.1 Unknown. * * @return string */ private static function get_theme_default_sidebar() { $theme = get_option( 'template' ); switch ( $theme ) { case 'canvas': $id = 'primary'; break; case 'Divi': case 'twentyeleven': case 'twentyfifteen': case 'twentyfourteen': case 'twentyseventeen': case 'twentysixteen': case 'twentytwelve': $id = 'sidebar-1'; break; case 'twentythirteen': $id = 'sidebar-2'; break; case 'twentyten': $id = 'primary-widget-area'; break; default: $id = ''; } return apply_filters( 'llms_get_theme_default_sidebar', $id, $theme ); } /** * Custom static constructor that modifies methods for native genesis sidebar compatibility * * @since 3.0.0 * * @return void */ public static function genesis_support() { // Remove default registration in favor of genesis registration methods. remove_action( 'widgets_init', array( __CLASS__, 'register_sidebars' ), 5 ); // Add genesis registration method. add_action( 'widgets_init', array( __CLASS__, 'genesis_register_sidebars' ), 5 ); // Replace primary genesis sidebar with our course / lesson sidebar. add_action( 'genesis_before_sidebar_widget_area', array( __CLASS__, 'genesis_do_sidebar' ) ); // Genesis uses it's own reg method so we can send an empty array of settings. add_filter( 'llms_sidebar_settings', '__return_empty_array' ); } /** * Outputs llms sidebars in place of the default Genesis Primary Sidebar * Removes the default sidebar action and calls the respective output method * from this class instead * * @since 3.0.0 * * @return void */ public static function genesis_do_sidebar() { $post_type = get_post_type(); if ( in_array( $post_type, array( 'course', 'lesson' ) ) ) { remove_action( 'genesis_sidebar', 'genesis_do_sidebar' ); $method = 'do_' . $post_type . '_sidebar'; if ( method_exists( __CLASS__, $method ) ) { add_action( 'genesis_sidebar', array( __CLASS__, $method ) ); } } } /** * Register LifterLMS Sidebars using genesis methods * * @since 3.0.0 * * @return void */ public static function genesis_register_sidebars() { $sidebars = self::get_sidebars(); foreach ( $sidebars as $sidebar ) { genesis_register_sidebar( $sidebar ); } } /** * Get a filtered array of sidebars to register * * @since 3.0.0 * * @return array */ public static function get_sidebars() { $sidebars = array( apply_filters( 'lifterlms_register_lesson_sidebar', array( 'id' => 'llms_course_widgets_side', 'description' => __( 'Widgets in this area will be shown on LifterLMS courses.', 'lifterlms' ), 'name' => __( 'Course Sidebar', 'lifterlms' ), ) ), apply_filters( 'lifterlms_register_course_sidebar', array( 'description' => __( 'Widgets in this area will be shown on LifterLMS lessons.', 'lifterlms' ), 'id' => 'llms_lesson_widgets_side', 'name' => __( 'Lesson Sidebar', 'lifterlms' ), ) ), ); $settings = apply_filters( 'llms_sidebar_settings', array( 'before_widget' => '<li id="%1$s" class="widget %2$s">', 'after_widget' => '</li>', 'before_title' => '<h2 class="widgettitle">', 'after_title' => '</h2>', ) ); foreach ( $sidebars as &$s ) { $s = array_merge( $settings, $s ); } return $sidebars; } /** * Registers all sidebars * * @since 3.0.0 * * @return void */ public static function register_sidebars() { $sidebars = self::get_sidebars(); foreach ( $sidebars as $sidebar ) { register_sidebar( $sidebar ); } } /** * Replaces existing sidebars with Course / Lesson sidebar widgets for supporting themes * * @since 1.0.0 * @since 3.0.0 Unknown. * * @param array $widgets array of sidebars and their widgets * @return array */ public static function replace_default_sidebars( $widgets ) { if ( is_singular( 'course' ) || is_singular( 'lesson' ) ) { $sidebar_id = self::get_theme_default_sidebar(); if ( $sidebar_id ) { if ( is_singular( 'course' ) && array_key_exists( 'llms_course_widgets_side', $widgets ) ) { $widgets[ $sidebar_id ] = $widgets['llms_course_widgets_side']; } elseif ( is_singular( 'lesson' ) && array_key_exists( 'llms_lesson_widgets_side', $widgets ) ) { $widgets[ $sidebar_id ] = $widgets['llms_lesson_widgets_side']; } } } return $widgets; } }
Expand full source code Collapse full source code View on GitHub
Methods Methods
- do_course_sidebar — Output course sidebar
- do_lesson_sidebar — Output lesson sidebar
- genesis_do_sidebar — Outputs llms sidebars in place of the default Genesis Primary Sidebar Removes the default sidebar action and calls the respective output method from this class instead
- genesis_register_sidebars — Register LifterLMS Sidebars using genesis methods
- genesis_support — Custom static constructor that modifies methods for native genesis sidebar compatibility
- get_sidebars — Get a filtered array of sidebars to register
- get_theme_default_sidebar — Get the theme default sidebar that will be replaced by course and lesson sidebars
- init — Static Constructor
- register_sidebars — Registers all sidebars
- replace_default_sidebars — Replaces existing sidebars with Course / Lesson sidebar widgets for supporting themes
Changelog Changelog
Version | Description |
---|---|
3.0.0 | Introduced. |