原文链接:https://www.zibll.com/forum-post/27828.html
使用教程:
将代码放在func.php里,然后在后台编辑或新建文章,有一个文章有效期模块
保存或更新后,前台对应文章就会有一个倒计时。时间一到,自动进入回收站。
原文的倒计时我觉得有一点简单,所以我使用AI修改了一下,美化图如下:
另外,原文模块是在文章上面,我给修改到下面了。
代码如下:
<?php
//文章有效期
CSF::createMetabox('post_validity_options', array(
'title' => '<strong style="text-align:center;">文章有效期</strong>',
'post_type' => ['post', 'page', 'forum_post'],
'context' => 'side',
'data_type' => 'unserialize',
));
CSF::createSection('post_validity_options', array(
'fields' => array(
array(
'id' => 'post_validity_time',
'type' => 'date',
'desc' => '<strong style="text-align:center;">设置内容的有效期,请确保格式正确,例如:<code>2020-10-10 23:59:59</code><br>到期后将会自动删除此此内容</strong>',
'settings' => array(
'dateFormat' => 'yy-mm-dd 23:59:59',
'changeMonth' => true,
'changeYear' => true,
),
),
),
));
function zib_the_content_fore($content)
{
$post_id = get_the_ID();
$time = get_post_meta($post_id, 'post_validity_time', true);
if ($time) {
$end_time = date("m/d/Y H:i:s", strtotime($time));
$over = '<script type="text/javascript">window.location.reload()</script>';
$warning_div = '<div class="warning-box" style="text-align: center; border: 2px dashed lightgray; padding: 10px; border-radius: 18px; margin-bottom: 15px;"><i class="fa fa-exclamation-triangle" style="font-size: 23px;"></i> <strong style="text-align:center;font-size: 23px;">XX网提醒您:因时效性问题,当前项目将于 <span class="countdown-style" style="color: red;background-color: black;border-radius: 5px;font-size: 23px;" data-over-text="'. esc_attr($over). '" data-countdown="'. $end_time. '"></span> 后自动删除</strong></div>';
if (!wp_is_mobile()) {
$content.= $warning_div;
}
}
return $content;
}
add_filter('the_content', 'zib_the_content_fore');
function zib_template_redirect_execute()
{
if (is_single()) {
$post_id = get_the_ID();
$time = get_post_meta($post_id, 'post_validity_time', true);
if ($time && strtotime($time) < strtotime(current_time('Y-m-d H:i:s'))) {
//执行删除文章
wp_trash_post($post_id);
wp_safe_redirect(home_url());
exit;
}
}
}
add_action('template_redirect', 'zib_template_redirect_execute');