如何创建在指定时间后发生更改或过期的页面?

时间:2010-11-01 作者:sorin

您可以为此创建新页面/帖子,并为其设置自定义发布日期,但现在的问题是:

How can you make a page to be available for a specified amount of time and replace it with something else after this?

一个使用示例是limited time offer 然后,您要替换或隐藏页面。

你可以想象,我正在寻找一个解决方案,让你可以安排这个,这样当变化发生时,你就可以休假了;)

1 个回复
最合适的回答,由SO网友:curtismchale 整理而成

如果您将特惠活动设置为自定义帖子类型,则可以将“计划”日期设置为您希望其过期的日期,然后在更改计划日期后使用此代码按计划自动发布。“future\\u show”行与我的“show”自定义帖子类型一致,因此如果你有“deal”自定义帖子类型,它会显示“future\\u deal”。

<?php
function sfn_setup_future_hook() {
 // Replace native future_post function with replacement
 remove_action(\'future_show\',\'_future_post_hook\');
 add_action(\'future_show\',\'publish_future_post_now\');
}

function publish_future_post_now($id) {
        wp_publish_post($id);
}

add_action(\'init\', \'sfn_setup_future_hook\');
?>
然后,您可以使用下面的代码在服务器上设置帖子,如果它比今天的帖子旧,则将其过期。它与WordPress挂钩cron 因此,您并不是一直在运行它,但您会注意到有一行注释掉了,它在init上运行,因此您可以测试它。对于测试,请注释掉前3行并使用init操作。但不要在生产中这样做。

<?php
// setting posts with current date or older to draft
if (!wp_next_scheduled(\'sfn_expire_hook\')){
    wp_schedule_event( time(), \'hourly\', \'sfn_expire_hook\');
}
add_action( \'sfn_expire_hook\', \'sfn_show_expire\');
function sfn_show_expire(){
    global $wpdb;
    $server_time = date(\'mdy\');
    $result = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_type = \'show\' AND post_status = \'publish\'");
    if( !empty($result)) foreach ($result as $a){
        $show_time = get_the_time(\'mdy\', $a->ID);
        if ( $server_time > $show_time ){
           $my_post = array();
           $my_post[\'ID\'] = $a->ID;
           $my_post[\'post_status\'] = \'draft\';
           wp_update_post( $my_post );
        }
    } // end foreach
}
// add_action( \'init\', \'sfn_show_expire\' );
?>
不要忘记将我的函数前缀(sfn)更改为您自己的,只是为了将它的函数与其他任何函数进行沙箱化。

Edit 我还认为可以将SQL查询更改为获取“deal”类别中的帖子,其工作方式也是一样的。创建一个完整的帖子类型,然后将其包含在网站/博客中,这可能比需要做的工作更多。

结束

相关推荐