我同意丹尼斯的观点,我不喜欢使用自定义字段来处理这类内容,但我还不知道还有什么其他方法。。。
通过更改循环的SQL查询,您可以做什么,如下所示:
add_filter(\'posts_join\', \'my_post_filter_join\');
function my_post_filter_join($join) {
global $wpdb;
if(is_home() || is_category() || is_search())
$join .= " LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id)";
return $join;
}
add_filter(\'posts_where\', \'my_post_filter_where\');
function my_post_filter_where($where) {
global $wpdb;
// current date in unix format
$current_time = current_time("timestamp");
// exclude any posts older than your expiry date set in the custom field
if(is_home()|| is_category() || is_search())
$where .= " AND ($wpdb->postmeta.meta_key = \'expiry_date\' AND $wpdb->postmeta.meta_value > \'{$current_time}\')";
return $where;
}
我在这里使用unix时间戳而不是格式化的日期字符串,您也应该这样做,这样更容易处理。对于管理界面,您可以使用日期选择器,并在保存帖子时将日期转换为时间戳。。。