Last active
February 3, 2023 19:05
-
-
Save dcooney/59edc2f616398e921899e70039fae42a to your computer and use it in GitHub Desktop.
Filter files
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Parse the Default Values set inside the plugin. | |
* | |
* @since 1.13.0 | |
* @package ALMFilters | |
*/ | |
// Only run if Filters are present. | |
if ( $alm_filters_array ) { | |
// Loop all filters to get the default_values. | |
foreach ( $alm_filters_array as $alm_filter ) { | |
if ( isset( $alm_filter['default_value'] ) && ! empty( trim( $alm_filter['default_value'] ) ) ) { | |
$alm_default_key = $alm_filter['key']; | |
$value = $alm_filter['default_value']; | |
switch ( $alm_default_key ) { | |
case '_author': | |
$author = $author ? "$author, $value" : $value; | |
break; | |
case 'postType': | |
$post_type = $post_type ? "$post_type, $value" : $value; | |
break; | |
case 'category': | |
$category = $category ? "$category, $value" : $value; | |
break; | |
case 'category_and': | |
$category__and = $category__and ? "$category__and, $value" : $value; | |
break; | |
case 'tag': | |
case '_tag': | |
$tag = $tag ? "$tag, $value" : $value; | |
break; | |
case 'tag_and': | |
$tag__and = $tag__and ? "$tag__and, $value" : $value; | |
break; | |
case 'order': | |
$order = $value; | |
break; | |
case 'orderby': | |
$orderby = $value; | |
break; | |
case '_year': | |
$year = $value; | |
break; | |
case '_month': | |
$month = $value; | |
break; | |
case '_day': | |
$day = $value; | |
break; | |
case 'search': | |
case 's': | |
$search = $value; | |
break; | |
case 'sort': | |
$sortArray = explode( ':', $value ); // Convert value to array at colon. | |
if ( count( $sortArray ) > 1 && count( $sortArray ) <= 3 ) { // Between 1 and 3 | |
$sortOrder = $sortArray[0]; | |
$sortOrderby = $sortArray[1]; | |
if ( in_array( $sortOrderby, alm_filters_get_order_array() ) ) { | |
$order = $sortOrder; | |
$orderby = $sortOrderby; | |
} else { | |
// Get meta order (`meta_value`, `meta_value_num`) | |
$metaOrder = isset( $sortArray[2] ) ? $sortArray[2] : 'meta_value'; | |
$order = $sortOrder; | |
$orderby = $metaOrder; | |
$meta_key = $sortOrderby; | |
} | |
} | |
break; | |
case 'taxonomy': | |
// Taxonomy. | |
$key = $alm_filter['taxonomy']; | |
$default_tax_operator = ''; | |
if ( taxonomy_exists( $key ) ) { | |
// Loop filters array to get the taxonomy operator. | |
foreach ( $alm_filters_array as $item ) { | |
if ( isset( $item['taxonomy'] ) && $item['taxonomy'] === $key ) { | |
$default_tax_operator = isset( $item['taxonomy_operator'] ) ? $item['taxonomy_operator'] : 'IN'; | |
} | |
} | |
$taxonomy = $taxonomy ? "$taxonomy:$key" : $key; | |
$taxonomy_terms = $taxonomy_terms ? "$taxonomy_terms:$value" : $value; | |
$taxonomy_operator = $taxonomy_operator ? "$taxonomy_operator:$default_tax_operator" : $default_tax_operator; | |
} | |
break; | |
case 'meta': | |
// Custom Fields. | |
$key = $alm_filter['meta_key']; | |
$filter_session_meta_operator = $filter_session_meta_type = ''; | |
if ( $key ) { | |
// Loop session array to get meta operator and type values. | |
foreach ( $alm_filters_array as $item ) { | |
if ( isset( $item['meta_key'] ) && $item['meta_key'] === $key ) { | |
$filter_session_meta_operator = isset( $item['meta_operator'] ) ? $item['meta_operator'] : 'IN'; | |
$filter_session_meta_type = isset( $item['meta_type'] ) ? $item['meta_type'] : 'CHAR'; | |
} | |
} | |
// Defaults. | |
$filter_session_meta_operator = empty( $filter_session_meta_operator ) ? 'IN' : $filter_session_meta_operator; | |
$filter_session_meta_type = empty( $filter_session_meta_type ) ? 'CHAR' : $filter_session_meta_type; | |
// Set meta query params. | |
$meta_key = $meta_key ? "$meta_key:$key" : $key; | |
$meta_value = $meta_value ? "$meta_value:$value" : $value; | |
$meta_compare = $meta_compare ? "$meta_compare:$filter_session_meta_operator" : $filter_session_meta_operator; | |
$meta_type = $meta_type ? "$meta_type:$filter_session_meta_type" : $filter_session_meta_type; | |
} | |
break; | |
default: | |
break; | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* This file parses the browser querystring to set the proper query args. | |
* | |
* @since 1.0 | |
* @package ALMFilters | |
*/ | |
// Get querystring array. | |
$alm_filters_querystring = ALMFilters::alm_filters_parse_url(); | |
if ( $alm_filters_querystring ) { | |
// Set initial Taxonomy and Meta Query vars. | |
$filter_taxonomy_count = 0; | |
$filter_meta_count = 0; | |
$filter_taxonomy = ''; | |
$filter_taxonomy_terms = ''; | |
$filter_taxonomy_operator = ''; | |
$filter_meta_key = ''; | |
$filter_meta_value = ''; | |
$filter_meta_compare = ''; | |
$filter_meta_type = ''; | |
// Loop all querystrings. | |
foreach ( $alm_filters_querystring as $key => $value ) { | |
$alt_key = ''; | |
// Meta query filter. | |
if ( $alm_filters_meta_array && in_array( $key, $alm_filters_meta_array ) ) { | |
$alt_key = $key; | |
$key = 'custom_field_query'; | |
} | |
// Taxonomy query filter. | |
if ( $alm_filters_taxonomy_array && in_array( $key, $alm_filters_taxonomy_array ) ) { | |
$alt_key = $key; | |
$key = 'taxonomy_query'; | |
} | |
// Remove HTML tags from the querystring values. | |
$value = htmlspecialchars( wp_strip_all_tags( $value ) ); | |
switch ( $key ) { | |
case 'order': | |
$order = str_replace( '+', ',', $value ); | |
break; | |
case 'orderby': | |
$orderby = str_replace( '+', ',', $value ); | |
break; | |
case '_author': | |
$author = str_replace( '+', ',', $value ); | |
break; | |
case 'postType': | |
$post_type = str_replace( '+', ',', $value ); | |
break; | |
case 'category': | |
case '_category': | |
$category = str_replace( '+', ',', $value ); | |
break; | |
case 'category_and': | |
$category__and = str_replace( '+', ',', $value ); | |
break; | |
case 'tag': | |
case '_tag': | |
$tag = str_replace( '+', ',', $value ); | |
break; | |
case 'tag_and': | |
$tag__and = str_replace( '+', ',', $value ); | |
break; | |
case '_year': | |
$year = $value; | |
break; | |
case '_month': | |
$month = $value; | |
break; | |
case '_day': | |
$day = $value; | |
break; | |
case 'search': | |
$search = $value; | |
break; | |
case 's': | |
$search = $value; | |
break; | |
case 'sort': | |
// Sort order. | |
$sortArray = explode( ':', $value ); // Convert value to array at colon. | |
if ( count( $sortArray ) > 1 && count( $sortArray ) <= 3 ) { // Between 1 and 3. | |
$sortOrder = $sortArray[0]; | |
$sortOrderby = $sortArray[1]; | |
if ( in_array( $sortOrderby, alm_filters_get_order_array() ) ) { | |
$order = $sortOrder; | |
$orderby = $sortOrderby; | |
} else { | |
// Get meta order (`meta_value`, `meta_value_num`). | |
$metaOrder = isset( $sortArray[2] ) ? $sortArray[2] : 'meta_value'; | |
$order = $sortOrder; | |
$orderby = $metaOrder; | |
$meta_key = $sortOrderby; | |
} | |
} | |
break; | |
case 'custom_field_query': | |
// Meta Query. | |
$filter_session_meta_operator = ''; | |
$filter_session_meta_type = ''; | |
// Loop session array to get meta operator and type values. | |
foreach ( $alm_filters_array as $item ) { | |
if ( isset( $item['meta_key'] ) && $item['meta_key'] === $alt_key ) { | |
$filter_session_meta_operator = isset( $item['meta_operator'] ) ? $item['meta_operator'] : 'IN'; | |
$filter_session_meta_type = isset( $item['meta_type'] ) ? $item['meta_type'] : 'CHAR'; | |
} | |
} | |
$filter_meta_key .= $filter_meta_count > 0 ? ':' . $alt_key : $alt_key; | |
$filter_meta_value .= $filter_meta_count > 0 ? ':' . str_replace( '+', ',', $value ) : str_replace( '+', ',', $value ); | |
$filter_meta_compare .= $filter_meta_count > 0 ? ':' . $filter_session_meta_operator : $filter_session_meta_operator; | |
$filter_meta_type .= $filter_meta_count > 0 ? ':' . $filter_session_meta_type : $filter_session_meta_type; | |
$filter_meta_count++; | |
break; | |
case 'taxonomy_query': | |
// Taxonomy. | |
$key = alm_filters_is_archive() ? alm_filters_remove_underscore( $alt_key ) : $alt_key; | |
if ( taxonomy_exists( $key ) ) { | |
$filter_session_tax_operator = ''; | |
// Loop filters array to get the taxonomy operator. | |
foreach ( $alm_filters_array as $item ) { | |
if ( isset( $item['taxonomy'] ) && $item['taxonomy'] === $key ) { | |
$filter_session_tax_operator = isset( $item['taxonomy_operator'] ) ? $item['taxonomy_operator'] : 'IN'; | |
} | |
} | |
$filter_taxonomy .= $filter_taxonomy_count > 0 ? ':' . $key : $key; | |
$filter_taxonomy_terms .= $filter_taxonomy_count > 0 ? ':' . str_replace( '+', ',', $value ) : str_replace( '+', ',', $value ); | |
$filter_taxonomy_operator .= $filter_taxonomy_count > 0 ? ':' . $filter_session_tax_operator . '' : $filter_session_tax_operator; | |
$filter_taxonomy_count++; | |
} | |
break; | |
case 'pg': | |
$pg = $value; | |
break; | |
default: | |
break; | |
} | |
} | |
// Apply Taxonomies. | |
if ( ! empty( $filter_taxonomy ) && ! empty( $filter_taxonomy_terms ) ) { | |
// Append querystring taxonomy query params to existing taxonomy query. | |
$taxonomy = $taxonomy ? $taxonomy . ':' . $filter_taxonomy : $filter_taxonomy; | |
$taxonomy_terms = $taxonomy_terms ? $taxonomy_terms . ':' . $filter_taxonomy_terms : $filter_taxonomy_terms; | |
$taxonomy_operator = $taxonomy_operator ? $taxonomy_operator . ':' . $filter_taxonomy_operator : $filter_taxonomy_operator; | |
} | |
// Apply Meta Queries. | |
if ( ! empty( $filter_meta_key ) && isset( $filter_meta_value ) ) { | |
// Append querystring meta query params to existing meta query. | |
$meta_key = $meta_key ? $meta_key . ':' . $filter_meta_key : $filter_meta_key; | |
$meta_value = $meta_value ? $meta_value . ':' . $filter_meta_value : $filter_meta_value; | |
$meta_compare = $meta_compare ? $meta_compare . ':' . $filter_meta_compare : $filter_meta_compare; | |
$meta_type = $meta_type ? $meta_type . ':' . $filter_meta_type : $filter_meta_type; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment