FileMaster
Search
Toggle Dark Mode
Home
/
.
/
wp-content
/
plugins
/
ultimate-faqs
/
includes
Edit File: Query.class.php
<?php if ( !defined( 'ABSPATH' ) ) exit; if ( !class_exists( 'ewdufaqQuery' ) ) { /** * Class to handle common queries used to pull faqs from * the database. * * Bookings can be retrieved with specific date ranges, common * date params (today/upcoming), etc. This class is intended for * the base plugin as well as extensions or custom projects which * need a stable mechanism for reliably retrieving faqs data. * * Queries return an array of ewdufaqReview objects. * * @since 2.0.0 */ class ewdufaqQuery { /** * Bookings * * Array of faqs retrieved after get_faqs() is called * * @since 2.0.0 */ public $faqs = array(); /** * Query args * * Passed to WP_Query * http://codex.wordpress.org/Class_Reference/WP_Query * * @since 2.0.0 */ public $args = array(); /** * Query context * * Defines the context in which the query is run. * Useful for hooking into the right query without * tampering with others. * * @since 2.0.0 */ public $context; // The total number of faqs found matching the current query parameters public $found_faqs = array(); // Current page of faqs being retrieved public $current_page; // Max number of pages of faqs matching the query public $max_page; /** * Instantiate the query with an array of arguments * * This supports all WP_Query args as well as several * short-hand arguments for common needs. Short-hands * include: * * date_range string today|upcoming|dates * start_date string don't get faqs before this * end_date string don't get faqs after this * * @see ewdufaqQuery::prepare_args() * @param args array Options to tailor the query * @param context string Context for the query, used * in filters * @since 2.0.0 */ public function __construct( $args = array(), $context = '' ) { global $ewd_ufaq_controller; $defaults = array( 'post_type' => EWD_UFAQ_FAQ_POST_TYPE, 'post_status' => 'publish', 'posts_per_page' => -1, 'order' => 'DESC', 'paged' => 1, ); $this->args = wp_parse_args( $args, $defaults ); $this->context = $context; } /** * Parse the args array and convert custom arguments * for use by WP_Query * * @since 2.0.0 */ public function prepare_args() { global $ewd_ufaq_controller; $args = $this->args; $args['include_children'] = ( ! empty( $args['include_children'] ) and strtolower( $args['include_children'] ) != 'yes' ) ? false : true; if ( ! empty( $args['search_string'] ) ) { $args['s'] = $args['search_string']; } if ( ! empty( $args['post_count'] ) ) { $args['posts_per_page'] = $args['post_count']; } if ( ! empty( $args['faq_page'] ) ) { $args['paged'] = $args['faq_page']; } if ( ! empty( $args['post__in'] ) ) { $args['post__in'] = is_array( $args['post__in'] ) ? $args['post__in'] : json_decode( str_replace( array( '[', ']' ), array( '[', ']' ) ) ); } if ( ! empty( $args['post__in_string'] ) ) { $args['post__in'] = ! empty( $args['post__in'] ) ? array_merge( $args['post__in'], explode( ',', $args['post__in_string'] ) ) : explode( ',', $args['post__in_string'] ); } $tax_query = array(); if ( ! empty( $args['include_category'] ) ) { $include_category_array = explode( ',', $args['include_category'] ); $tax_query[] = array( 'taxonomy' => EWD_UFAQ_FAQ_CATEGORY_TAXONOMY, 'field' => 'slug', 'terms' => $include_category_array, 'include_children' => $args['include_children'] ); } if ( ! empty( $args['exclude_category'] ) ) { $exclude_category_array = explode( ',', $args['exclude_category'] ); $tax_query[] = array( 'taxonomy' => EWD_UFAQ_FAQ_CATEGORY_TAXONOMY, 'field' => 'slug', 'operator' => 'NOT IN', 'terms' => $exclude_category_array, 'include_children' => $args['include_children'] ); } if ( ! empty( $args['include_category_ids'] ) ) { $include_category_ids_array = explode( ',', $args['include_category_ids'] ); $tax_query[] = array( 'taxonomy' => EWD_UFAQ_FAQ_CATEGORY_TAXONOMY, 'field' => 'term_id', 'terms' => $include_category_ids_array, 'include_children' => $args['include_children'] ); } if ( ! empty( $args['exclude_category_ids'] ) ) { $exclude_category_ids_array = explode( ',', $args['exclude_category_ids'] ); $tax_query[] = array( 'taxonomy' => EWD_UFAQ_FAQ_CATEGORY_TAXONOMY, 'field' => 'term_id', 'operator' => 'NOT IN', 'terms' => $exclude_category_ids_array, 'include_children' => $args['include_children'] ); } if ( ! empty( $args['include_tag'] ) ) { $include_tag_ids_array = explode( ',', $args['include_tag'] ); $tax_query[] = array( 'taxonomy' => EWD_UFAQ_FAQ_TAG_TAXONOMY, 'field' => 'slug', 'terms' => $include_tag_ids_array ); } if ( ! empty( $tax_query ) ) { $args['tax_query'] = $tax_query; } /*$meta_query = array(); if ( ! empty( $args['product_name'] ) ) { $meta_query[] = array( 'key' => 'EWD_UFAQ_Product_Name', 'value' => $args['product_name'], 'compare' => '=', ); } if ( ! empty( $meta_query ) ) { $args['meta_query'] = $meta_query; }*/ $orderby = array(); if ( empty( $args['product_name'] ) and $ewd_ufaq_controller->settings->get_setting( 'group-by-product' ) ) { $orderby['meta_value'] = $ewd_ufaq_controller->settings->get_setting( 'group-by-product-order' ); } if ( ! empty( $args['orderby'] ) ) { if ( $args['orderby'] == 'rating' or $args['orderby'] == 'popular' ) { $orderby['meta_value_num'] = $args['order']; } elseif ( $args['orderby'] == 'date' ) { $orderby['date'] = $args['order']; } elseif ( $args['orderby'] == 'title' ) { $orderby['title'] = $args['order']; } elseif ( $args['orderby'] == 'set_order' ) { $orderby['meta_value_num'] = $args['order']; } } if ( $args['orderby'] == 'rating' ) { $args['meta_key'] = 'FAQ_Total_Score'; } elseif ( $args['orderby'] == 'popular' ) { $args['meta_key'] = 'ufaq_view_count'; } elseif ( $args['orderby'] == 'set_order' ) { $args['meta_key'] = 'ufaq_order'; } if ( ! empty( $orderby ) ) { $args['orderby'] = $orderby; } $this->args = $args; return $this->args; } /** * Parse $_REQUEST args and store in $this->args * * @since 2.0.0 */ public function parse_request_args() { $args = array(); if ( isset( $_REQUEST['faq_page'] ) ) { $args['faq_page'] = intval( $_REQUEST['faq_page'] ); } if ( isset( $_REQUEST['search_string'] ) ) { $args['search_string'] = sanitize_text_field( stripslashes( $_REQUEST['search_string'] ) ); } if ( isset( $_REQUEST['post_count'] ) ) { $args['post_count'] = sanitize_text_field( $_REQUEST['post_count'] ); } if ( isset( $_REQUEST['orderby'] ) ) { $args['orderby'] = sanitize_text_field( $_REQUEST['orderby'] ); } if ( isset( $_REQUEST['order'] ) ) { $args['order'] = sanitize_text_field( $_REQUEST['order'] ); } if ( isset( $_REQUEST['include_category'] ) ) { $args['include_category'] = sanitize_text_field( $_REQUEST['include_category'] ); } if ( isset( $_REQUEST['exclude_category'] ) ) { $args['exclude_category'] = sanitize_text_field( $_REQUEST['exclude_category'] ); } if ( get_query_var( 'ufaq_category_slug' ) ) { $args['include_category'] = get_query_var( 'ufaq_category_slug' ); } if ( isset( $_REQUEST['include_tag'] ) ) { $args['include_tag'] = sanitize_text_field( $_REQUEST['include_tag'] ); } if ( get_query_var( 'ufaq_tag_slug' ) ) { $args['include_tag'] = get_query_var( 'ufaq_tag_slug' ); } $this->args = array_merge( $this->args, $args ); } /** * Retrieve query results * * @since 2.0.0 */ public function get_faqs() { $faqs = array(); $args = apply_filters( 'ewd_ufaq_query_args', $this->args, $this->context ); $query = new WP_Query( $args ); if ( $query->have_posts() ) { while( $query->have_posts() ) { $query->the_post(); $faq = new ewdufaqFaq(); if ( $faq->load_post( $query->post ) ) { $faqs[] = $faq; } } } $this->found_faqs = $query->found_posts; $this->current_page = $this->args['paged']; $this->max_page = $query->max_num_pages; $this->faqs = $faqs; wp_reset_query(); return $this->faqs; } } } // endif
Save
Back