Su consulta está configurada para obtener publicaciones de los últimos 20 minutos, si desea hoy excepto los últimos 20 minutos, debe usar data < DATE_SUB( NOW( ) , INTERVAL 20
MINUTE )
y no más grande que.
La segunda parte (a partir de hoy) se puede hacer con curdate() función:
CURDATE() = DATE(data)
y juntos:
SELECT id, titulo
FROM posts WHERE
data < DATE_SUB( NOW( ) , INTERVAL 20 MINUTE )
AND
CURDATE() = DATE(data)
ORDER BY RAND( )