Combine 2 WP_queries into one (OR relation)

meta_query can only be used for meta queries, you can’t use it for non-meta parameters. Even if you could, it would not give a performance benefit.

What you want can’t be done, and your second example is searching for posts that have a post meta named post_parent.

The canonical answer, is to use 2 query objects and 2 loops, or, to use a common method of indicating parent/child relationships so that only 1 query is necessary.

Additionally:

  • Using -1 to fetch all posts is dangerous, never do this. This is a great way to introduce memory exhaustion problems as the site grows larger
    • “But I only have 50 posts it should never get that far” then ask for 60 posts and guarantee that it never will. A high value is always preferable to unlimited value. If you need to show all of them, then infinite scrolling and pagination are far better options.
  • By asking only for the IDs, you might think you are improving performance, but instead you are hurting it. WP will fetch all the post data in one query to speed things up, but now it has to do a query every, single, time to fetch individual post objects. So rather than 1 query to fetch 300 posts all at once, you now have 300 queries to fetch individual posts. Anytime you ask for the title, or post meta, grab the posts permalink, etc
  • Querying for posts by their post meta values is super expensive, and gets more expensive as the site grows larger. This is what taxonomies are for, use a taxonomy. Think about it, why did they store post tags and categories in a taxonomy table instead of using post meta? Because it’s slow! Post meta tables are optimised for finding values when you already know the post ID. Taxonomy tables are optimised for finding post IDs when you know the value