从后端删除过期日期的 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);
}
} ?>
希望这对其他人有帮助。
我有一个名为 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);
}
} ?>
希望这对其他人有帮助。