Found solution for this problem.
It turned out that woocommerce affects post_type
query variable in pre_get_posts
filter without checking that another post_type
has been requested. It’s done in WC_Query.product_query
method:
if ( ! $q->is_tax( 'product_cat' ) && ! $q->is_tax( 'product_tag' ) )
$q->set( 'post_type', 'product' );
Fix for this problem is simple. You just need to check that product
post type has been actually requested in the beginning of product_query
method:
// Check that product post type has been requested
if ($q->get('post_type') != 'product')
return;
After that everything works fine.
Update:
Fix has been merged into woocommerce master branch: https://github.com/woothemes/woocommerce/pull/4582.