If we pass a String to functions like get_posts, and that string is not a meaningful querystring (for Example get_posts(' ')), the function returns the results of the default query (the last five posts or such). Is it possible either to suppress this behaviour or - even better - to find out, if the string was a meaningful querystring or if the function just fell back to default hence it was not?

Changing the default query-settings is not a solution because I don't want to affect the main loop, but only a function call of get_posts in a plugin.

  • 2
    Why don’t you pass a sanitized string to the function? – fuxia Jun 16 '13 at 13:02
  • To be honest, I think the main reason I started to think about that, was, that I tried different Querystrings and misspelled them quite often (or got failed with the right parameters) and got always confused, because it returned some posts anyway... – Paflow Jun 16 '13 at 20:57

If you look at how the query works, this is not a case of ...

  1. Check to see if the passed query conditions return posts
  2. Else run a fallback query

What happens is that your conditions are merged with certain defaults via a very complicated sequence of conditionals. At the end of that, you have the SQL that runs to get your posts. The system doesn't check to see if your conditions are "crap" and then decide to use them or not. Those conditions just get merged into the query in a way that generates a valid SQL statement. I am not sure how the query would know what is and isn't "crap" anyway.

The only thing I can think of doing would be to hook to pre_get_posts and check the query vars according to some set of conditions that you define to determine "crap" or "not crap".

As for the particular example you provide, get_posts is intentionally written to retrieve the latest post if not passed any arguments.

new WP_Query('') will not return anything, by the way, but essentially I agree with @toscho's suggestion in a comment-- pass a sanitized string. Know what you are sending to the function before you send it. If the string is empty or doesn't meet some other requirement, don't call the get_posts function at all.

  • Okay, thank you for the explanation - obviously it works a little bit different than I thought, so my question is obsolete. – Paflow Jun 16 '13 at 20:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.