我有一个想法,让粘性帖子在一段时间后过期。
仅供参考,我正在使用自定义帖子类型和自定义字段套件,并通过创建布尔自定义字段来创建粘性帖子。premium
是返回值的真/假自定义字段1
如果选中该复选框(使帖子成为特色帖子)
如果我创建了另一个自定义字段来设置到期日期,那么在达到到期日期时,我如何将粘性自定义字段值设置为0?
我的意思是(书面英语):
用“premium”键检查自定义字段,检查自定义字段“premium”的值是否为1,将“premium”值设置为0,是否有人可以帮助实现此功能?
我将从以下内容开始(请原谅我的风格,我只是想提供一些想法)
global $post;
global $cfs;
if ( \'1\' = $cfs->get(\'premium\') && \' \' != $cfs->get(\'expiration_date\') ) :
$current_date = date(Y-m-d);
$expiration_date = $cfs->get(\'expiration_date\');
if( // I\'m stuck here... ) ....
date_post_meta( $post->ID, \'premium\', \'1\', \'0\' ); // set premium field from 1 to 0 for every post that matches
endif;
最合适的回答,由SO网友:okiedokey 整理而成
明白了。插件开发人员帮助我查看建议的代码。
首先,确保您申报global $cfs
(使用自定义Field Suite插件时需要)。
以下代码检查名为premium
如果其值设置为1
(这意味着它应该是一个高级帖子)以及一个名为expiration_date
如果设置了一个值。
然后,代码正确格式化今天的日期,以匹配自定义字段的日期格式,在本例中为Y-m-d。
定义并格式化日期后,代码检查过期日期是否在过去($expiration_date < $today
) 并更新premium
字段来自1
到0
, 这意味着它取消了posts premium状态。
The code:
global $cfs; //necessary for custom field suite plugin
if ( \'1\' == $cfs->get(\'premium\') && \'\' != $cfs->get(\'expiration_date\') ) : // if post has premium status and an expiration date set
$current_date = date(\'Y-m-d\'); // format today\'s date
$expiry = $cfs->get(\'expiration_date\');
$today = strtotime($current_date);
$expiration_date = strtotime($expiry);
if ( $expiration_date < $today ) { // if expiration date is in the past
$field_data = array(\'premium\' => \'0\'); // unset premium status
$post_data = array(\'ID\' => $post->ID);
$cfs->save($field_data, $post_data);
}
endif;