这个posts_where
筛选SQL语句的“WHERE”部分,而不是查询字符串。所以
$where .= "&post_date > \'".date(\'Y-m-d H:i:s\', strtotime(\'-24 hours\'))."\'";
应该是
$where .= " AND post_date > \'".date(\'Y-m-d H:i:s\', strtotime(\'-24 hours\'))."\'";
此外,由于此钩子是为每个查询(管理和公共端)触发的,因此您应该使用一些逻辑,仅在需要时附加自定义where语句。
或者,您可以在查询之前添加过滤器,然后再次删除:
add_filter( \'posts_where\', \'filter_where\' );
$query_string =\'gdsr_sort=thumbs&posts_per_page=10\';
query_posts( $query_string );
remove_filter( \'posts_where\', \'filter_where\' );
See related Codex page.