【问题标题】:Meta Query Select ACF Not Returning Post For Current Date元查询选择 ACF 不返回当前日期的帖子
【发布时间】:2020-07-27 07:20:59
【问题描述】:

我正在尝试根据一周中的周一至周日的 ACF 选择(多个)天数返回帖子类型。我使用 ACF 选择键 (show_days) 和当前日期的关系设置了一个元查询。 var_dump 显示两个数组正在相互比较,但仍未显示显示(帖子类型)。

<?php

      $date = date('l');
      $shows = get_field('station_shows', false, false);
      $query = new WP_Query ( array(
        'post_type'       => 'shows',
        'posts_per_page'  => 1,
        'post__in'        => $shows,
        'post_status'     => 'publish',
        'meta_query' => array(
            'relation' => 'AND',

           array (
                       'key'           => 'show_days',
                       'value'     => array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'),
                       'compare'  => 'IN',
                     ),
           array (
                       'key'       => 'date',
                       'value'     => $date,
                       'compare'   => '=',
                       'type'      => 'DATE',
                     ), 

            )));
       if ( $query->have_posts() ) { while( $query->have_posts() ) {
       $query->the_post();
       echo '<div class="onAir"><h3>Currently On Air: ';
       the_title();
       if (get_field('dj', $query->ID)) {
                 $dj = get_field('dj');
                 echo ' w/ ';
              echo $dj;
          }
           echo '</h3></div>';

          } wp_reset_postdata();
        }

 ?>

不知道是不是数据库元值不对应。我什至尝试过 unserialize() 数组,但它仍然返回相同的数组值。任何帮助,将不胜感激。谢谢!

【问题讨论】:

  • WP_Query 文档说“只有当日期以 YYYY-MM-DD 格式存储并使用此格式进行测试时,‘类型’DATE 才能与‘比较’值 BETWEEN 一起使用。”但 $date 总是返回星期几的名称(星期一、星期二等)。也许你应该换成$date = date('Y-m-d')
  • 对。星期几的名称在 var_dump 中以 'Tuesday' (今天)的形式返回,它还表明该数组也在显示......所以周二播出的当前节目应该返回,但它没有。不过我会尝试更改格式。
  • 这里是 var_dump:AND ( mt2.meta_key = 'show_days' AND mt2.meta_value IN ('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday ','Sunday') ) AND ( mt3.meta_key = 'date' AND CAST(mt3.meta_value AS DATE) = '2020-04-14' ) )
  • meta_value 返回2020-04-14,它确认了文档中描述的Y-m-d 格式。你试过把第一行改成$date = date('Y-m-d')吗?
  • 是的,我就是这么做的。但是,show_days 将仅根据一周中的几天工作,而不是实际日期。 (周一至周五,周末)....例如,一个节目仅在每周四播出。所以我必须有实际的日子而不是 Y-m-d

标签: php wordpress advanced-custom-fields meta-query


【解决方案1】:

好的,我想通了。该查询与时间查询结合使用,因此我将整个代码放在了上面。它将当前时间与两个自定义字段(时间范围)以及选中标记的日期(复选框)进行比较。因此,如果它是周二下午 4 点,它只会显示时间范围为下午 4 点,并且如果周二是复选标记。此外,这有一个关系字段,我可以在其中将节目分配给某些广播电台。因此,在广播电台帖子类型页面上,直播功能将根据一天中的时间显示!

 <?php
      $time = current_time('H:i:s');
      $date = strftime("%u", time());
      $shows = get_field('station_shows', false, false);
      $query = new WP_Query ( array(
        'post_type'       => 'shows',
        'posts_per_page'  => 1,
        'post__in'        => $shows,
        'post_status'     => 'publish',
        'orderby'         => 'meta_value',
        'meta_key'        => 'show_days',
        'meta_query' => array(
            'relation' => 'AND',
        array(
                  'key'       => 'start_time',
                  'value'     => $time,
                  'compare'   => '<=',
                  'type'      => 'TIME',
            ),
        array(
                  'value'     => $time,
                  'key'       => 'end_time',
                  'compare'   => '>=',
                  'type'      => 'TIME',
            ),


       ))

        );
        $days = the_field('show_days');
      if ($query->have_posts()  && $days = $date  )  { while( $query->have_posts() ) {
        $query->the_post();

        echo '<div class="onAir"><h3>Currently <span>On Air</span> : ';
        the_title();
           echo '</h3></div>';

   }
   wp_reset_postdata();
  }
 ?>

【讨论】:

    猜你喜欢
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多