Abstract product constructor

Check for numeric $product, and expand the checking to see if its
passed a post object. Fixes #5341