La tua query è impostata per ricevere i post degli ultimi 20 minuti, se vuoi oggi tranne gli ultimi 20 minuti, dovresti usare data < DATE_SUB( NOW( ) , INTERVAL 20
MINUTE )
e non più grande di.
La seconda parte (da oggi) può essere eseguita con curdate() funzione:
CURDATE() = DATE(data)
e insieme:
SELECT id, titulo
FROM posts WHERE
data < DATE_SUB( NOW( ) , INTERVAL 20 MINUTE )
AND
CURDATE() = DATE(data)
ORDER BY RAND( )