Skip to content

Instantly share code, notes, and snippets.

@LaxusCroco
Created May 12, 2023 15:41
Show Gist options
  • Save LaxusCroco/817a0381669b4cfc50a4bdbdd0174ae8 to your computer and use it in GitHub Desktop.
Save LaxusCroco/817a0381669b4cfc50a4bdbdd0174ae8 to your computer and use it in GitHub Desktop.
JSF Filter posts that do not have any of the checked values
<?php
class JSF_Inverse_Meta_Filter {
public function __construct() {
add_filter( 'jet-smart-filters/query/final-query', array( $this, 'change_query' ) );
}
public function change_query( $query ) {
if ( empty( $query['meta_query'] ) ) {
return $query;
}
foreach ( $query['meta_query'] as $index => $query_item ) {
$query['meta_query'][$index] = $this->make_inverse( $query_item );
}
return $query;
}
public function make_inverse_single( $query_item ) {
if ( ! isset( $query_item['key'] ) || ! isset( $query_item['compare'] ) ) {
return $query_item;
}
$query_item['key'] = str_replace( '___inverse', '', $query_item['key'] );
switch ( $query_item['compare'] ) {
case '=':
$query_item['compare'] = '!=';
break;
case 'REGEXP':
$query_item['compare'] = 'NOT REGEXP';
break;
}
return $query_item;
}
public function make_inverse( $query_item ) {
if ( isset( $query_item['key'] ) && str_contains( $query_item['key'], '___inverse' ) ) {
$query_item = $this->make_inverse_single( $query_item );
} elseif ( isset( $query_item['relation'] ) ) {
$query_item['relation'] = 'AND';
foreach ( $query_item as $index => $inner_item ) {
$query_item[$index] = $this->make_inverse_single( $inner_item );
}
}
return $query_item;
}
}
new JSF_Inverse_Meta_Filter();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment