meta_query order by date present -> future then show null

Not sure if it helps you any, but I think splitting this into two simple queries is a simple way to do it but then requires some extra work to be able to display two $query results sequentially. This may also be better for users as you could make it clear that you’re showing them two lists with and without dates?

The logic that you have now says: ‘date_from is empty OR date_from >= today, and sort these by title’. That’s a bit different to what you want.

The logic you describe is more easily described as two lists that you want to show: (i’m assuming it’s ok to use date_from only and not also check date_to for being empty or not, and assuming that if date_from is empty you want to show them going back from today):

  1. (date_from IS NOT empty) AND date_from >= today, order by date_from ASC
  2. date_from IS empty, order by date_from DESC

If this sounds like a good direction, it should be possible to figure out how to get the two query results into one, there’s a rather complicated example here: https://stackoverflow.com/questions/23555109/wordpress-combine-queries, but happy to help with code as it sounds like a useful thing to be able to do.