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

时间:2017-03-13 04:53:47

标签: php wordpress advanced-custom-fields

我有一个名为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()函数兼容

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:2)

这最终对我有用

<?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);
    }
   } ?>

希望这有助于其他人。