wpsolr
Keymaster
4 years, 6 months ago #8646

To display only posts with no value in a taxonomy field:

add_action( WPSOLR_Events::WPSOLR_ACTION_SOLARIUM_QUERY, [
 $this,
 'wpsolr_action_query',
], 10, 1 );

/**
 *
 * Add a "not exists" filter on a taxonomy.
 *
 * @param array $parameters
 *
 */
public function wpsolr_action_query( $parameters ) {

$taxonomy_name = 'my-taxonomy';

 /* @var WPSOLR_AbstractSearchClient $search_engine_client */
 $search_engine_client = $parameters[ WPSOLR_Events::WPSOLR_ACTION_SOLARIUM_QUERY__PARAM_SOLARIUM_CLIENT ];

/**
 * Create a "not exists" filter
 */
$filter_not_exists_terms_in_taxonomy = $search_engine_client->search_engine_client_create_not(
 $search_engine_client->search_engine_client_create_filter_exists( $taxonomy_name . WpSolrSchema::_SOLR_DYNAMIC_TYPE_STRING )
);
$search_engine_client->search_engine_client_add_filter( "not in taxonomy {$taxonomy_name}", $filter_not_exists_terms_in_taxonomy );
}