Поле отношений ACF: родительский условный, основанный на вложенном условном - PullRequest
0 голосов
/ 15 июня 2019

У меня есть CPT под названием Classes. С помощью поля ACF Relationship я позволяю своему клиенту вручную выбирать классы для показа на переднем крае. У каждого класса есть срок годности.

В операторе foreach я установил условие, которое сравнивает текущую дату с датой истечения и показывает только предстоящие классы. Что мне нужно, так это показать одну заметку с надписью «нет предстоящих классов», как только все выбранные классы пройдут после истечения срока их действия.

Поддержка ACF предложила добавить инкрементальный оператор в цикл foreach и затем проверить, является ли это значение пустым. Они изменили мой код следующим образом, но он не работает. Дополнительная помощь от поддержки ACF выходит за рамки того, что они предлагают, поэтому я публикую здесь руководство. Спасибо!

<?php 
    $all_classes = get_sub_field('class');
    if( $all_classes ):
?>

    <?php
        $i = 0;
        foreach($all_classes as $post):
        setup_postdata($post);
    ?>

        <?php
            $now = time(); // get today's date
            $expiry_date = strtotime(get_field('class-expiry-date')); // get the expiration date
            if ($now < $expiry_date): // compare the dates and show upcoming classes only
            $i++;
        ?>

            class details

        <?php endif; ?>

    <?php
        endforeach;
        wp_reset_postdata();
    ?>

<?php else: ?>

    <?php
        //check if $i is empty
        if(empty($i)):
    ?>

        There are no upcoming classes.

    <?php endif; ?>

<?php endif; ?>

1 Ответ

0 голосов
/ 18 июня 2019

Iv'e сталкивался с этим много раз.Мой подход немного другой.Используется обычный WP_Query() и убедитесь, что в поле постобъекта отношения ACF сохраняются не выбранные вручную объекты как объект публикации, а как идентификатор сообщения .(это просто вариант для выбора на странице настраиваемого поля).Таким образом, я могу использовать собственные мета-запросы Wordpress

Мой массив args выглядит следующим образом, позволяя сортировать запрос по определенному полю даты, равному или более новому, чем сегодня.

 $args = array(
    'post_type'       => 'class', /* (your CPT slug: class or classes) */
    'posts_per_page'  => -1,
    'meta_key'        => 'class-expiry-date',
    'orderby'         => 'meta_value',
    'order'           => 'ASC',
    'post__in'        => array( get_sub_field( 'class' ) ),     
    'meta_query'      => array(
      array(
        'key'     => 'class-expiry-date',
        'value'   => date('Ymd', strtotime('now')),
        'type'    => 'date',
        'compare' => '>=',
      )
    )
  );

  $wp_query = new WP_Query( $args );

  if( $wp_query->have_posts() ) {
    while( $wp_query->have_posts() ) {
      $wp_query->the_post();
      // Upcoming classes !!
      // echo $post->post_title (example)
    }
  } else {
    // There are no upcoming classes
  }

  wp_reset_query();

Убедитесь, что вы выводите настраиваемое поле даты истечения срока действия в следующем формате в формате Ymd (также на странице с настраиваемыми полями)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...