Можно ли отфильтровать wp-запрос по пользовательской таксономии и состоянию поля ACF-файла? - PullRequest
1 голос
/ 25 марта 2020

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

Я хотел бы показать список заданий с определенным статусом задания, в которые еще не загружен файл.

Пример; Статус работы = выполнено. Поле файла отчета пусто

Код, который я получил, находится ниже. Все, что он делает в данный момент - это отображение 4х экземпляров первых «заданий» CPT - фильтры, похоже, не имеют значения.

<?php 

// get posts
$reports = array (
  'post_type' => 'jobs',
  'post_status' => 'inherit',
    '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'
        )
    )
);

if( $reports ): ?>

    <ul>

    <?php foreach( $reports as $reports ): 

        setup_postdata( $reports )

        ?>
        <li>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?> (date: <?php the_field('start_date'); ?>)</a>
        </li>

    <?php endforeach; ?>

    </ul>

    <?php wp_reset_postdata(); ?>

<?php endif; ?>

1 Ответ

0 голосов
/ 25 марта 2020

Все поля ACF в пользовательском типе записи могут быть доступны с помощью аргумента meta_query. Например, если вы хотите вернуть все 'post_type' => 'jobs', где пользовательское поле ACF 'report_field' было пустым, вы можете использовать следующий код:

$args = array (
  'post_type' => 'jobs',
    'tax_query' => array (
      array (
        'taxonomy' => 'job_status',
        'field' => 'slug',
        'terms' => array( 'complete' )
      ),
    ),
    'meta_query' => array (
      'relation' => 'AND',
        array (
          'key' => 'report_field',
          'value' => "",
          'compare' => "="
        )
    )
);

Если вы предпочитаете показывать jobs, где report_field не существует, вы можете изменить аргумент 'compare' => "=" на 'compare' => "NOT EXIST"

Еще один провал, с которым вы можете столкнуться, это post_status, поэтому убедитесь, что ваш post_status для вашего custom_post_type опубликован. В противном случае вам может понадобиться использовать другой аргумент для вашего post_status, например:

'post_status' => 'inherit'
...