Skip to content

Instantly share code, notes, and snippets.

@dcooney
Last active February 3, 2023 19:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dcooney/59edc2f616398e921899e70039fae42a to your computer and use it in GitHub Desktop.
Save dcooney/59edc2f616398e921899e70039fae42a to your computer and use it in GitHub Desktop.
Filter files
<?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;
}
}
}
}
<?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