Woocommerce custom shared taxonomy

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.