从后端删除过期日期的 ACF 字段

Delete ACF Field from the backend with expired date

我有一个名为 sub seminars 的 ACF 字段,在这个字段中还有一个名为 sub seminars 的字段,它是一个包含 start_date 和 end_date 的转发器字段。

我的帖子有几行此字段。

我想从后端删除转发器字段中有过期日期的行,这样它就不会出现在前端。

我正在使用此功能来实现此目的,但有些地方不起作用。

add_filter('acf/load_value/name=repeater_field_name', 'delete_old_courses_by_date');
function delete_old_courses_by_date($rows, $post_id, $field) {
  if (!is_array($value) || !count($value)) {
    return $value;
  }
  // get the current timestamp
  $now = time();

  // set up a new array to hold the values we keep
  $new_value = array();
  foreach ($rows as $row) {
    // the php strtotime() function could fail depending on
    // the return format of the date/time fields
    // this requires a valid date/time format as documented here
    // http://php.net/manual/en/datetime.formats.php
    // if this does not work I probably won't be much help figuring
    // our how to covert your return value to something usable
    $start = strtotime($row['start_date']);
    $end = strtotime($row['end_date']);
    if ($start > $now || $end > $now) {
      $new_value[] = $row;
    }
  }
  return $new_value;
}

如果我将 repeater_field_name 设为 start_date,所有 start_date 行都将被删除。

请注意,我的日期格式是 Ymd,我不知道该格式是否与 strtotime() 函数兼容

任何帮助将不胜感激。

这就是最终对我有用的方法

<?php   for($i=0;$i<10;$i++){
        $ap = get_post_meta($post->ID,'sub_seminars_'.$i.'_start_date',true);
        $startdate = date("Ymd", strtotime($ap));
        $todaydate = date("Ymd");
      if(strtotime($todaydate) > strtotime($startdate) && !empty($ap)){
       $del_data = array(
                    'Ref' => 'sub_seminars_'.$i.'_ref',
                    'Start date' => 'sub_seminars_'.$i.'_start_date',
                    'End Date' => 'sub_seminars_'.$i.'_end_date',
                    'Venue' => 'sub_seminars_'.$i.'_venue',
                    'Fees' => 'sub_seminars_'.$i.'_fees',
                    'CPE Credits' => 'sub_seminars_'.$i.'_cpe_credits'
        );
      delete_row('sub_seminars', 1);
    }
   } ?>

希望这对其他人有帮助。