Как использовать meta_query для проверки наличия значения в мета-поле?
(WordPress 4.3.1)
Я создаю пользовательский цикл и хочу включать только записи, в которые загружен файл в пользовательское поле: audio_file.
Пробовал множество решений из интернета, но пока ничего не работает.
Можно ли использовать meta_query для проверки наличия значения у ключа?
Вот моя текущая попытка:
global $post;
$args = array(
'post_type' => array (
'podcast',
'event',
),
'posts_per_page' => 10,
'post_status' => 'publish',
'paged' => get_query_var( 'paged' ),
'meta_query' => array (
'key' => 'audio_file',
'value' => '' ,
'compare' => '!=',
//'type' => 'date',
),
);
global $wp_query;
$wp_query = new WP_Query( $args );
if ( have_posts() ) { while ( have_posts() ) { the_post();
Ожидаемый результат - отображать записи, где поле 'audio_file' не пустое.
Спасибо. (WordPress 4.3.1)

Я разобрался, meta_query должен быть массивом внутри массива, так как он предназначен для сложных запросов с использованием 'relation'.
meta_query => array (
array (
//'relation' => 'OR',
'key' => 'audio_file', //Поле для проверки.
'value' => '', //Значение поля.
'compare' => '!=', //Условное выражение, применяемое к значению.
),
),
Условие '!=' (не равно) '' (null) возвращает true, если файл был загружен.

Это может помочь кому-то. Этот код будет искать значение метаполя, если оно существует и не пустое.
'meta_query' => [
'relation' => 'AND',
[
'key' => 'your_key',
'compare' => 'EXISTS',
],
// Не хотим пустые значения
[
'key' => 'your_key',
'value' => '',
'compare' => '!=',
],
],

Можно ли использовать meta_query для проверки наличия значения у ключа?
Любое значение? Используйте EXISTS
'meta_query' => array (
'key' => 'audio_file',
'value' => '' ,
'compare' => 'EXISTS',
'type' => 'date',
),
);
Не знаю, почему ваш загруженный файл должен быть типа date
. Ожидал бы binary
или, возможно, char

Похоже, что теперь тип значения стал критически важен. Я не смог заставить мета-запрос работать корректно без указания типа. Особенно это важно при проверке существования значения.
Этот код сейчас не работает.
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'meta_key',
'value' => '',
'compare' => '!=',
),
),
А этот работает.
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'meta_key',
'value' => '',
'compare' => '!=',
'type' => 'NUMERIC'
),
),
Единственное отличие — это тип.
