你好@idontknowhow:
您一直在努力解决PHP中的问题,而实际上您需要关注SQL。你的第一个问题是你颠倒了“极性”(这是我刚才编的一个术语,但有点合适);您要查找的开始日期大于今天,结束日期早于今天;逻辑上的不可能。
第二个问题是忽略反极性更为微妙;您将日期与等长字符串进行比较,以便得到误报。此SQL说明了问题:
SELECT * FROM wp_posts WHERE \'2011-9-20\' < \'2011-11-20\'
The
WHERE
条件“looks”true,因此查询应该返回所有记录,而实际上它不返回任何记录,这是因为
\'2011-9\' < \'2011-1\'
实际上是假的。
这里有一个有效的替代品date_check_where()
使用SQL的函数DATE()
函数将日期中的字符串规范化为实际日期值,以便对其进行比较,它当然修复了我首先提到的极性问题:
add_filter( \'posts_where\', \'date_check_where\' );
function date_check_where( $where ) {
$today = date(\'Y-m-d\');
$where .=<<<SQL
AND DATE(startdate.meta_value) >= DATE(\'{$today}\')
AND DATE(enddate.meta_value) <= DATE(\'{$today}\')
SQL;
return $where;
}
我使用的注释
date(\'Y-m-d\')
而不是
date(\'Y-n-j\')
因为我发现它使用起来更干净,而且由于
DATE()
作用