我有一个名为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()函数兼容
任何帮助都会非常感激。
答案 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);
}
} ?>
希望这有助于其他人。