Quick read: 我需要根据两个自定义字段值(日期)自动更新自定义分类法的值,这意味着帖子会自动更新,只需单击“更新”即可更改值。
Long details:我创建了一个名为event\\u status的新私有分类法。可能的值为“opening\\u soon”、“playing\\u now”和“closed”。
此分类法附加到名为“event”的自定义帖子类型。创建此类帖子时,会填写一组自定义字段(使用高级自定义字段插件)。一个是“开始日期”,另一个是“结束日期”。这是本次活动的第一场也是最后一场演出。
创建事件帖子时,taxonomy Event\\u状态设置为“opening\\u soon”(因为事件尚未发生)。
我需要做的是根据当前日期与事件开始或结束日期的比较,更改event\\u status分类法的值,如通过自定义字段设置的。
我可以通过挂接到wp\\u update\\u post()来解决这个问题,但问题是我希望更新post状态automatically 而不用我点击“更新帖子”来改变它。它应该根据当前日期进行更改。希望有办法做到这一点。
我之前尝试了一个使用简单函数来确定帖子状态的解决方案,但很快就发现我无法使用函数进行查询(显然),所以我选择了分类法解决方案,这样我就可以通过它来查询帖子。
下面是我目前正在尝试在save\\u post上更新分类法的函数,但这也不太管用。底部用于仅具有一个性能的事件(因此end\\u date字段为空),顶部用于处理具有开始和结束日期的事件。
//Set post_status based on the current date on wp_update_post()
function set_event_status($post_ID) {
$start = strtotime(get_field(\'start_date\'));
$end = strtotime(get_field(\'end_date\'));
$now = strtotime(\'now - 7 hours\');
if ($start && $end) {
if (($start <= $now) && ($end >= $now)) {
$status = \'playing_now\';
} elseif ($start >= $now) {
$status = \'opening_soon\';
} elseif ($end < $now) {
$status = \'closed\';
}
} elseif ($start) {
if ($start <= $now) {
$status = \'closed\';
} elseif ($start >= $now) {
$status = \'opening_soon\';
} elseif ($start == $now) {
$status = \'playing_now\';
}
} else {
$status = \'closed\';
}
wp_set_post_terms( $post_ID, $status, \'event_status\' );
return $post_ID;
}
add_action( \'save_post\', \'set_event_status\' );
最合适的回答,由SO网友:s_ha_dum 整理而成
您正在传递字符串作为第二个参数$terms
你有一个层次分类法。Per the Codex:
对于分层术语(如类别),必须始终传递id而不是术语名称,以避免混淆,因为可能有另一个子级具有相同的名称。
If you follow the source, 你会注意到你的弦被擦掉了。
您需要使用术语ID
或更改分类法,使其不具有层次结构。
您可以使用get_term_by(\'name\',\'tax-slug\',\'tax-name\')
获取ID
s
就自动获取更新而言,您必须使用Javascript进行更新。