Отфильтровать сообщения с meta_query NOT IN, где значение имеет несколько значений

Я хотел бы использовать meta_key для хранения нескольких значений в этом ключе. После этого я хотел бы отфильтровать сообщения, которые не содержат определенного значения в ключе. Другими словами, просто покажите сообщения, которые не содержат определенного значения. Это, однако, не представляется возможным. Я пишу этот вопрос здесь, чтобы узнать, пришел ли кто-то к такому же выводу или я просто что-то упустил. Вот код, который я использовал:

 // The values in key "_no_interest" are: 1,2,3 add_action( 'pre_get_posts', 'custom_pre_query' ); function custom_pre_query( $query ) { if( $query->is_main_query() && !is_admin() && $query->is_post_type_archive( 'my_custom_post_type' ) ) { $meta_query = array( array( 'key' => '_no_interest', 'value' => '3', 'compare' => 'NOT IN' ) ); $query->set( 'meta_query', $meta_query ); $query->set( 'posts_per_page', -1 ); $query->set( 'post_status', 'publish' ); $query->set( 'orderby', 'date' ); } } 

Это не сработает, и не будет, если я буду использовать оператор '!=' . Однако, если я устанавливаю значение равным 'IN' или '=' , тогда он будет работать.

Может ли кто-нибудь подтвердить это или я что-то упустил?

Solutions Collecting From Web of "Отфильтровать сообщения с meta_query NOT IN, где значение имеет несколько значений"

Операторы NOT IN и! = Сравнения работают нормально, однако имейте в виду, что если вы используете meta, ваши данные могут работать не так, как вы ожидаете. В частности, meta_keys не обязательно должны быть уникальными для каждой записи. Сообщение может иметь _no_interest, установленное в 1, и имеет другую мета-строку с установленным значением 2.

Например, если у вас есть сообщение с _no_interest, установленным в 1, а также установлено 2 в другой строке, то даже если вы исключаете 2, это сообщение все равно будет отображаться, потому что оно имеет 1 на нем в другой строке.

Кроме того, если вы используете IN или NOT IN, тогда ваш параметр «value» действительно должен быть массивом значений. Таким образом, ваше значение «3» должно быть массивом («3»).

Также имейте в виду, что наличие мета, которое не существует для сообщения, даст вам неожиданные результаты также с NOT IN. Если вы делаете сообщения с метазнанием NOT IN, то сообщения, которые не имеют этого мета, также не будут отображаться. Другими словами, они должны будут иметь значение А для мета, а не ТО ЧТО-то конкретное значение. Это связано с тем, что указание мета вызывает INNER JOIN, что исключает строки, которые не имеют мета. Исключением является использование сравнения NOT EXISTS.