Как я могу использовать tax_query и meta_query вместе? - PullRequest
0 голосов
/ 27 марта 2020

У меня есть пользовательский тип записи под названием «jobs» с таксономией под названием «job-status». Я пытаюсь отобразить список заданий с определенным налоговым условием (задание выполнено), для которых не загружен отчет с типом поля ACF файла.

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

Код, который у меня пока есть;

$posts = get_posts(array(
    'post_type'         => 'jobs',
    'posts_per_page'        => -1,
    'meta_key'          => 'job_date',
    'orderby'           => 'meta_value',
    'order'             => 'ASC',
    'tax_query' => array(
        array(
            'taxonomy' => 'job_status',
            'field' => 'slug',
            'terms' => array( 'complete' )
        ),
    ),
    'meta_query' => array (
      'relation' => 'AND',
        array (
          'key' => 'report_upload',
          'value' => '',
          'compare' => 'NOT EXISTS'
        )
    )
));

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Ты рядом! Я думаю, вам нужно только удалить 'value' => '', из meta_query, чтобы он выглядел следующим образом:

$posts = get_posts(array(
    'post_type'         => 'jobs',
    'posts_per_page'        => -1,
    'meta_key'          => 'job_date',
    'orderby'           => 'meta_value',
    'order'             => 'ASC',
    'tax_query' => array(
        array(
            'taxonomy' => 'job_status',
            'field' => 'slug',
            'terms' => array( 'complete' )
        ),
    ),
    'meta_query' => array(
        array (
          'key' => 'report_upload',
          'compare' => 'NOT EXISTS'
        )
    )
));

Также не требуется 'relation' => 'AND', так как это значение по умолчанию.

Если бы у вас была другая мысль, где вам может понадобиться что-то более похожее на это:

$posts = get_posts(array(
    'post_type'         => 'jobs',
    'posts_per_page'        => -1,
    'meta_key'          => 'job_date',
    'orderby'           => 'meta_value',
    'order'             => 'ASC',
    'tax_query' => array(
        array(
            'taxonomy' => 'job_status',
            'field' => 'slug',
            'terms' => array( 'job-complete' )
        ),
    ),
    // check for case where key does not exist or has an "empty" value (added a relation OR for this one)
    'meta_query' => array (
        'relation' => 'OR',
        array (
          'key' => 'report_upload',
          'compare' => 'NOT EXISTS'
        ),

        array (
          'key' => 'report_upload',
          'value' => '',
          'compare' => '='
        )
    )
));
0 голосов
/ 27 марта 2020

Полный рабочий код, если это поможет кому-нибудь в будущем


$posts = get_posts(array(
    'post_type'         => 'jobs',
    'posts_per_page'        => -1,
    'meta_key'          => 'job_date',
    'orderby'           => 'meta_value',
    'order'             => 'ASC',
    'tax_query' => array(
        array(
            'taxonomy' => 'job_status',
            'field' => 'slug',
            'terms' => array( 'complete' )
        ),
    ),
    'meta_query' => array (
      'relation' => 'AND',
        array (
          'key' => 'report_upload',
          'value' => '',
          'compare' => '='
        )
    )
));
...