get( 'post_type' ); if ( is_array( $post_type ) ) { $post_type = array_values( array_filter( array_map( 'sanitize_key', $post_type ) ) ); } else { $post_type = sanitize_key( (string) $post_type ); } if ( '' === $post_type || empty( $post_type ) ) { if ( $query->is_home() || $query->is_category() || $query->is_tag() || $query->is_author() || $query->is_date() || $query->is_search() ) { return in_array( 'post', $content_types, true ); } } foreach ( $content_types as $type ) { if ( $type === $post_type || ( is_array( $post_type ) && in_array( $type, $post_type, true ) ) ) { return true; } if ( $query->is_post_type_archive( $type ) ) { return true; } } if ( $query->is_tax() ) { $taxonomy = sanitize_key( (string) $query->get( 'taxonomy' ) ); if ( '' !== $taxonomy ) { foreach ( $content_types as $type ) { $object_taxonomies = get_object_taxonomies( $type, 'names' ); if ( is_array( $object_taxonomies ) && in_array( $taxonomy, $object_taxonomies, true ) ) { return true; } } } } $tax_query = $query->get( 'tax_query' ); if ( is_array( $tax_query ) ) { foreach ( $tax_query as $tax_clause ) { if ( ! is_array( $tax_clause ) || empty( $tax_clause['taxonomy'] ) ) { continue; } $taxonomy = sanitize_key( (string) $tax_clause['taxonomy'] ); foreach ( $content_types as $type ) { $object_taxonomies = get_object_taxonomies( $type, 'names' ); if ( is_array( $object_taxonomies ) && in_array( $taxonomy, $object_taxonomies, true ) ) { return true; } } } } return false; } function acewpcf_query_matches_content_type( $query, $content_type ) { $content_type = acewpcf_sanitize_content_type( $content_type ); return acewpcf_query_targets_content( $query, $content_type ); } function acewpcf_apply_content_filters_to_query( $query ) { if ( is_admin() || $query->is_feed() || $query->get( 'acewpcf_skip_request_filters' ) ) { return; } if ( ! acewpcf_query_targets_content( $query ) ) { return; } $matched_content_types = array(); foreach ( acewpcf_get_filter_sets() as $filter ) { $content_type = acewpcf_get_filter_content_type( $filter ); if ( acewpcf_query_matches_content_type( $query, $content_type ) ) { $matched_content_types[ $content_type ] = true; } } if ( empty( $matched_content_types ) ) { return; } $tax_query = $query->get( 'tax_query' ); $tax_query = is_array( $tax_query ) ? $tax_query : array(); $applied_search = false; $author_ids = array(); $date_query = $query->get( 'date_query' ); $date_query = is_array( $date_query ) ? $date_query : array(); foreach ( acewpcf_get_all_active_filter_tax_clauses() as $filter_clause ) { $filter = acewpcf_get_filter_set( isset( $filter_clause['filter_id'] ) ? $filter_clause['filter_id'] : '' ); if ( empty( $filter ) ) { continue; } $content_type = acewpcf_get_filter_content_type( $filter ); if ( empty( $matched_content_types[ $content_type ] ) ) { continue; } if ( empty( $filter_clause['taxonomy'] ) || empty( $filter_clause['slugs'] ) ) { continue; } $tax_query[] = array( 'taxonomy' => $filter_clause['taxonomy'], 'field' => 'slug', 'terms' => $filter_clause['slugs'], 'operator' => ( isset( $filter_clause['operator'] ) && 'and' === $filter_clause['operator'] && count( $filter_clause['slugs'] ) > 1 ) ? 'AND' : 'IN', ); } if ( ! empty( $tax_query ) ) { $query->set( 'tax_query', $tax_query ); } foreach ( array_keys( $matched_content_types ) as $content_type ) { foreach ( acewpcf_get_all_active_search_queries() as $search_data ) { if ( $content_type !== $search_data['content_type'] ) { continue; } $existing = trim( (string) $query->get( 's' ) ); $query->set( 's', trim( $existing . ' ' . $search_data['search'] ) ); $applied_search = true; } foreach ( acewpcf_get_all_active_author_filters() as $author_data ) { if ( $content_type !== $author_data['content_type'] ) { continue; } $author_ids = array_merge( $author_ids, $author_data['author_ids'] ); } foreach ( acewpcf_get_all_active_date_filters() as $date_data ) { if ( $content_type !== $date_data['content_type'] ) { continue; } $group = $date_data['clauses']; if ( count( $group ) > 1 ) { $group['relation'] = 'OR'; } $date_query[] = $group; } } $author_ids = array_values( array_unique( array_filter( array_map( 'absint', $author_ids ) ) ) ); if ( ! empty( $author_ids ) ) { $query->set( 'author__in', $author_ids ); } if ( ! empty( $date_query ) ) { $query->set( 'date_query', $date_query ); } if ( $applied_search ) { $query->is_search = true; } $post_type = $query->get( 'post_type' ); if ( empty( $post_type ) && 1 === count( $matched_content_types ) ) { $query->set( 'post_type', array_key_first( $matched_content_types ) ); } } add_action( 'pre_get_posts', 'acewpcf_apply_content_filters_to_query' ); function acewpcf_get_filter_redirect_query_args() { $args = array(); foreach ( acewpcf_get_request_query_params() as $key => $value ) { if ( '' === $key ) { continue; } if ( in_array( $key, array( 'paged', 'preview', 'preview_id', 'preview_nonce', 'nonce', '_wpnonce', 'ver', 'post_type', 'p', 'page_id', 'action' ), true ) ) { continue; } if ( 0 === strpos( $key, 'elementor' ) || 0 === strpos( $key, 'preview' ) || 0 === strpos( $key, 'cpcf_filter_' ) ) { continue; } $args[ $key ] = sanitize_text_field( (string) $value ); } foreach ( acewpcf_get_filter_sets() as $filter ) { $filter_id = isset( $filter['id'] ) ? sanitize_key( (string) $filter['id'] ) : ''; if ( '' === $filter_id ) { continue; } if ( acewpcf_is_search_filter( $filter ) ) { $search = acewpcf_parse_filter_request_search( $filter_id ); if ( '' !== $search ) { $args[ acewpcf_get_filter_query_var( $filter_id ) ] = $search; } continue; } $slugs = acewpcf_parse_filter_request_slugs( $filter_id ); if ( ! empty( $slugs ) ) { $args[ acewpcf_get_filter_query_var( $filter_id ) ] = implode( ',', $slugs ); } } return $args; } function acewpcf_request_contains_filter_query_vars() { foreach ( acewpcf_get_request_query_params() as $key => $value ) { unset( $value ); if ( '' === $key ) { continue; } if ( 0 === strpos( $key, 'cpcf_filter_' ) ) { return true; } } return false; }