Created
May 12, 2023 15:41
-
-
Save LaxusCroco/817a0381669b4cfc50a4bdbdd0174ae8 to your computer and use it in GitHub Desktop.
JSF Filter posts that do not have any of the checked values
This file contains hidden or 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 | |
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