Как использовать meta_query для проверки наличия значения в мета-поле?

16 дек. 2015 г., 23:12:28
Просмотры: 19.4K
Голосов: 3

(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)

1
Комментарии

Также обновление WP до последней версии всегда хорошая идея с точки зрения безопасности (особенно если другие люди уже протестировали её и подтвердили, что она безопасна и не ломает сайты или плагины).

N00b N00b
17 дек. 2015 г. 01:47:35
Все ответы на вопрос 4
0

Я разобрался, meta_query должен быть массивом внутри массива, так как он предназначен для сложных запросов с использованием 'relation'.

meta_query => array (
    array (
        //'relation' => 'OR',
        'key' => 'audio_file', //Поле для проверки.
        'value' => '', //Значение поля.
        'compare' => '!=', //Условное выражение, применяемое к значению.
    ),  
),

Условие '!=' (не равно) '' (null) возвращает true, если файл был загружен.

17 дек. 2015 г. 02:25:08
0

Это может помочь кому-то. Этот код будет искать значение метаполя, если оно существует и не пустое.

'meta_query' => [
    'relation' => 'AND',
    [
        'key'     => 'your_key',
        'compare' => 'EXISTS',
    ],
    // Не хотим пустые значения
    [
        'key'     => 'your_key',
        'value'   => '',
        'compare' => '!=',
    ],
],
29 июн. 2020 г. 14:26:08
2

Можно ли использовать meta_query для проверки наличия значения у ключа?

Любое значение? Используйте EXISTS

'meta_query'     => array (
                        'key' => 'audio_file',
                        'value' => '' ,
                        'compare' => 'EXISTS',
                        'type'    => 'date',
                         ),
);

Не знаю, почему ваш загруженный файл должен быть типа date. Ожидал бы binary или, возможно, char

16 дек. 2015 г. 23:33:49
Комментарии

Верно... пропустил это в предыдущей попытке определить поле даты. Возможно, 'type' вообще не нужен... Пробовал EXISTS — безрезультатно...

AJD AJD
16 дек. 2015 г. 23:58:07

Да, возможно, он вообще не нужен

s_ha_dum s_ha_dum
17 дек. 2015 г. 00:02:38
0

Похоже, что теперь тип значения стал критически важен. Я не смог заставить мета-запрос работать корректно без указания типа. Особенно это важно при проверке существования значения.

Этот код сейчас не работает.

'meta_query' => array(
    'relation' => 'AND',
    array(
        'key'     => 'meta_key',
        'value'   => '',
        'compare' => '!=',
    ),
),

А этот работает.

'meta_query' => array(
    'relation' => 'AND',
    array(
        'key'     => 'meta_key',
        'value'   => '',
        'compare' => '!=',
        'type' => 'NUMERIC'
    ),
),

Единственное отличие — это тип.

4 дек. 2021 г. 14:11:02