I've an occasions category that is searchable with a sub-category (by city in which the event has been held). I've the 'The Future has become!A wordpress plugin to let me publish future dated posts but wishing will be able to setup a paginated template that, whenever a publish 'expires' it'll no more appear informed/archive.

I am also wondering if you're able to remove these posts from search engine results too?

This really is my current Occasions page code if the helps:

<h2>Upcoming Events</h2>
        <ul class="posts">
            $limit = get_option('posts_per_page');
            $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
            query_posts('showposts=' . $limit . '&paged=' . $paged .'&cat=1&order=ASC');
            $wp_query->is_archive = true; $wp_query->is_home = false;
            <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
                <li class="events_ticker" id="post-<?php the_ID(); ?>">
                <span class="left">
                <h3><?php the_time('F jS, Y') ?></h3>
                <p><?php if (strlen($post->post_title) > 25) { echo substr(the_title($before = '', $after = '', FALSE), 0, 25) . '...';} else {the_title();} ?></p>
                <?php global $more; $more = 0; the_excerpt(); ?>
                <p><a href="<?php echo get_permalink(); ?>">Read More</a></p>
                    <a href="<?php echo get_permalink(); ?>"><?php if ( function_exists("has_post_thumbnail") && has_post_thumbnail() ) { the_post_thumbnail(array(143,110), array("class" => "right post_thumbnail")); } ?></a>
                <img src="<?php bloginfo('stylesheet_directory'); ?>/images/content_breaker_wide.png" alt=" breaker" class="content_breaker" />
            <?php endwhile; ?>
        <!-- end events loop -->
        <div class="navigation">
            <p class="alignleft"><?php next_posts_link('< Next') ?></p>
            <p class="alignright"><?php previous_posts_link('Next >') ?></p>

<?php endif; ?>

I do not think there's a simple parameter to express "all posts until this date", which means you should implement the posts_where_paged filter. There, you should check for !(is_archive() || is_search()), since these two can continue normally. For that other areas, you give a " AND $wpdb->posts.post_date < NOW()" or something like that like this (try not to use now, since which will hide occasions which happen later today, and also you most likely do not want that).

A similar question was asked on the WordPress Answers Stack Exchange site (in private beta until August 20 2010, which means you can't visit it unless of course you pre-registered). Joe Hoyle's suggestion there is simple:

If whatever you are thinking of doing is add an extra date for 'show times', it might be simpler to include a meta box which does just that - while using Publish date to spoof it may be potentially problematic, as WordPress sets it to "future" status whenever it's up-to-date having a future publish date (I think), so you'll have to be connecting whenever a publish is up-to-date to create it again. Also, this way you can reserve "Publish Date" for what it's intended.

I'd most likely only use a meta_key, along with a custom meta box. Although it is dependent how complex your queries are that demonstrate the posts.

Should you set the meta_value like a timestamp, you can find through the show time date still, or choose before / following a certain date:

$events = get_posts('post_type=events&meta_key=show_time&meta_value='
. strtotime( '+1 week' ) .

Would get all "occasions" having a showtime no later a week in the current date. Note: The above mentioned is untested, but should work :)

(This response is community wiki and so i do not get repetition points just for reposting what Joe stated.)