This is the plugin code:
<?php
/*
Plugin Name: Posts Expire
Description: Adds an expiry date to posts.
Author: Michael O'Connell
Version: 1.02
Author URI: http://wunder-ful.com/
This plugin is released under version 2 of the GPL:
http://www.opensource.org/licenses/gpl-license.php
*/
class posts_expire
{
function posts_expire()
{
global $wpdb;
if ( !get_settings('posts_have_end_date') )
{
$wpdb->query("ALTER TABLE <code>$wpdb->posts</code> ADD <code>post_end_date</code> DATE AFTER <code>post_date</code>");
update_option('posts_have_end_date', 1);
}
add_filter('posts_where', array(&$this, 'add_where_clause'));
add_filter('posts_orderby', array(&$this, 'add_orderby')); //bypass orderby safety check
add_action('simple_edit_form', array(&$this, 'add_end_date_input'));
add_action('edit_form_advanced', array(&$this, 'add_end_date_input'));
add_action('edit_page_form', array(&$this, 'add_end_date_input'));
add_action('save_post', array(&$this, 'add_update_statement'));
}
function add_where_clause($where)
{
if(get_settings('show_expired_posts') || is_admin() || is_single())
return $where;
//exclude nulls when getting a list of posts that expire soon
$include_nulls = !($_GET['orderby'] == 'post_end_date');
$now = date('Y-m-d') . ' 23:59:59'; //timezone not taken into consideration...
$where = $where . " AND (post_end_date >= '$now'";
if($include_nulls)
$where = $where . ' OR post_end_date IS NULL';
$where = $where . ')';
return $where;
}
function add_orderby($orderby)
{
if($_GET['orderby'] == 'post_end_date')
return '<code>post_end_date</code> ASC';
else
return $orderby;
}
function add_end_date_input()
{
$end_date = get_end_date();
echo "<div>Enter a end date (yyyy-mm-dd): <input type='text' name='end_date' value='$end_date'></input></div>";
}
function add_update_statement($post_ID)
{
global $wpdb;
$end_date = $_POST['end_date'];
if($end_date)
$wpdb->query("UPDATE <code>$wpdb->posts</code> SET <code>post_end_date</code> = '$end_date' WHERE <code>ID</code> =$post_ID LIMIT 1 ;");
else //remove existing end date if user blanks field
$wpdb->query("UPDATE <code>$wpdb->posts</code> SET <code>post_end_date</code> = NULL WHERE <code>ID</code> =$post_ID LIMIT 1 ;");
}
}
$posts_expire =& new posts_expire();
function the_end_date($prefix = '')
{
$end_date = mysql2date(get_settings('date_format'),get_end_date());
if(!$prefix)
$prefix = __('Expires ');
if(function_exists('get_begin_date') && get_begin_date())
$prefix = ', ' . $prefix;
if($end_date)
echo $prefix . $end_date;
else
echo __('Expiration Unknown');
}
function get_end_date()
{
global $post;
return $post->post_end_date;
}
?>
I guess I should remove the filter “posts_where” for pages I want to show expired posts also, something like:
remove_filter(‘posts_where’, ‘add_where_clause’); ??