Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 107

Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 234

Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 235

Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 236

Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 237

Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 238

Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 239
* @link https://themeum.com * @since 1.0.0 */ namespace TUTOR; if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Course filter class * * @since 1.0.0 */ class Course_Filter { /** * Course Category * * @var string */ private $category = 'course-category'; /** * Course Tag * * @var string */ private $tag = 'course-tag'; /** * Course term id * * @var null|integer */ private $current_term_id = null; /** * Constructor * * @since 1.0.0 * * @param boolean $register_hook register hook or not. * @return void|null */ public function __construct( $register_hook = true ) { if ( ! $register_hook ) { return; } add_action( 'wp_ajax_tutor_course_filter_ajax', array( $this, 'load_listing' ), 10, 0 ); add_action( 'wp_ajax_nopriv_tutor_course_filter_ajax', array( $this, 'load_listing' ), 10, 0 ); add_filter( 'term_link', __CLASS__ . '::filter_course_category_term_link', 10, 3 ); } /** * Load course listing * * @since 1.0.0 * * @param mixed $filters filters. * @param boolean $return_filter return filterd data or not. * @return mixed */ public function load_listing( $filters = null, $return_filter = false ) { ! $return_filter ? tutils()->checking_nonce() : 0; $sanitized_post = tutor_sanitize_data( null == $filters ? $_POST : $filters ); //phpcs:ignore WordPress.Security.NonceVerification.Missing ! is_array( $sanitized_post ) ? $sanitized_post = array() : 0; $default_per_page = tutils()->get_option( 'courses_per_page', 12 ); $courses_per_page = (int) tutils()->array_get( 'course_per_page', $sanitized_post, $default_per_page ); // Pagination arg. $current_page = (int) Input::sanitize_request_data( 'current_page', 1 ); $paged = max( 1, $current_page ); $sanitized_post['current_page'] = $paged; // Order arg. $order_by = 'post_date'; $order = 'DESC'; if ( isset( $sanitized_post['course_order'] ) ) { switch ( $sanitized_post['course_order'] ) { case 'newest_first': $order_by = 'post_date'; $order = 'DESC'; break; case 'oldest_first': $order_by = 'post_date'; $order = 'ASC'; break; case 'course_title_az': $order_by = 'post_title'; $order = 'ASC'; break; case 'course_title_za': $order_by = 'post_title'; $order = 'DESC'; break; } } $args = array( 'post_status' => 'publish', 'post_type' => tutor()->course_post_type, 'posts_per_page' => $courses_per_page, 'paged' => $paged, 'orderby' => $order_by, 'order' => $order, 'tax_query' => array( 'relation' => 'OR', ), ); $post_ids_array = tutils()->array_get( 'tutor-course-filter-post-ids', $sanitized_post, array() ); $post_ids_array = array_map( function ( $post_id ) { return (int) $post_id; }, $post_ids_array ); if ( count( $post_ids_array ) ) { $args['post__in'] = $post_ids_array; } $exclude_ids_array = tutils()->array_get( 'tutor-course-filter-exclude-ids', $sanitized_post, array() ); $exclude_ids_array = array_map( function ( $exclude_id ) { return (int) $exclude_id; }, $exclude_ids_array ); if ( count( $exclude_ids_array ) ) { $args['post__not_in'] = $exclude_ids_array; } // Prepare taxonomy. foreach ( array( 'category', 'tag' ) as $taxonomy ) { $term_array = tutils()->array_get( 'tutor-course-filter-' . $taxonomy, $sanitized_post, array() ); ! is_array( $term_array ) ? $term_array = array( $term_array ) : 0; $term_array = array_filter( $term_array, function( $term_id ) { return is_numeric( $term_id ); } ); if ( count( $term_array ) > 0 ) { $tax_query = array( 'taxonomy' => $this->$taxonomy, 'field' => 'term_id', 'terms' => $term_array, 'operator' => 'IN', ); array_push( $args['tax_query'], $tax_query ); } } // Prepare level and price type. $is_membership = get_tutor_option( 'monetize_by' ) == 'pmpro' && tutils()->has_pmpro(); $level_price = array(); foreach ( array( 'level', 'price' ) as $type ) { if ( $is_membership && 'price' === $type ) { continue; } $type_array = tutils()->array_get( 'tutor-course-filter-' . $type, $sanitized_post, array() ); $type_array = array_map( 'sanitize_text_field', ( is_array( $type_array ) ? $type_array : array( $type_array ) ) ); if ( 'level' === $type && in_array( 'all_levels', $type_array, true ) ) { continue; } if ( in_array( Course::PRICE_TYPE_PAID, $type_array, true ) ) { $type_array = apply_filters( 'tutor_course_filter_price_type_paid', $type_array ); } if ( count( $type_array ) > 0 ) { $level_price[] = array( 'key' => 'level' === $type ? '_tutor_course_level' : '_tutor_course_price_type', 'value' => $type_array, 'compare' => 'IN', ); } } count( $level_price ) ? $args['meta_query'] = $level_price : 0; $search_key = sanitize_text_field( tutils()->array_get( 'keyword', $sanitized_post, null ) ); $search_key ? $args['s'] = $search_key : 0; if ( isset( $sanitized_post['tutor_course_filter'] ) ) { switch ( $sanitized_post['tutor_course_filter'] ) { case 'newest_first': $args['orderby'] = 'post_date'; $args['order'] = 'desc'; break; case 'oldest_first': $args['orderby'] = 'post_date'; $args['order'] = 'asc'; break; case 'course_title_az': $args['orderby'] = 'post_title'; $args['order'] = 'asc'; break; case 'course_title_za': $args['orderby'] = 'post_title'; $args['order'] = 'desc'; break; } } // Return filters. $filters = apply_filters( 'tutor_course_filter_args', $args ); if ( $return_filter ) { return $filters; } ob_start(); query_posts( $filters ); tutor_load_template( 'archive-course-init', array_merge( array( 'loop_content_only' => true ), $sanitized_post ) ); wp_send_json_success( array( 'html' => ob_get_clean() ) ); exit; } /** * Get current term ID * * @since 1.0.0 * @return integer */ private function get_current_term_id() { if ( null === $this->current_term_id ) { $queried = get_queried_object(); $this->current_term_id = ( is_object( $queried ) && property_exists( $queried, 'term_id' ) ) ? $queried->term_id : false; } return $this->current_term_id; } /** * Sort terms hierarchically * * @since 1.0.0 * * @param array $terms term list. * @param integer $parent_id parent ID. * @return array */ private function sort_terms_hierarchically( $terms, $parent_id = 0 ) { $term_array = array(); foreach ( $terms as $term ) { if ( $term->parent == $parent_id ) { $term->children = $this->sort_terms_hierarchically( $terms, $term->term_id ); $term_array[] = $term; } } return $term_array; } /** * Render terms hierarchically * * @since 1.0.0 * * @param array $terms term list. * @param string $taxonomy taxonomy name. * @return void */ private function render_terms_hierarchically( $terms, $taxonomy ) { $term_id = $this->get_current_term_id(); foreach ( $terms as $term ) { ?>
  • children ) ? $this->render_terms_hierarchically( $term->children, $taxonomy ) : 0; ?> $this->$taxonomy, 'hide_empty' => true, ) ); $this->render_terms_hierarchically( $this->sort_terms_hierarchically( $terms ), $taxonomy ); } /** * Filter course-category term's permalink * * Add a query param so that course filter can work * * @param string $termlink default term link. * @param \WP_Term $term term obj. * @param string $taxonomy taxonomy. * * @return string customized term link */ public static function filter_course_category_term_link( string $termlink, \WP_Term $term, string $taxonomy ) { if ( 'course-category' === $taxonomy ) { $termlink = add_query_arg( 'tutor-course-filter-category', $term->term_id, $termlink ); } return $termlink; } }