I've been testing ATUM Free as well as the trial for Mutli-Inventory. There'a a lot to love about this plugin but I'm running into a couple issues.
Issue #1
When viewing a product listing in a product category page it's set to show 12 products per page but instead it was showing 5 or 8 or some other random number less than 12. Looking in Query Monitor, the page appears to get all the products, filter the first 12 products for the page, then from those 12 products filter the out-of-stock products resulting in less than 12 products on a page.
There are a couple factors that may be contributing to this issue.
- In Woocommerce, I've selected to "Hide out of stock items from the catalog"
- I'm using FacetWP plugin, which works great and in an integral part of our store.
Issue #2
Site performance suffers significantly while using the Mutli-Inventory add-on. We have a LOT of products in our store (about 220k) so seemingly small inefficiencies can cause a lot slowness on our site. We've gone a lot to speed up out site but some things we can't control. There are a couple queries on the product categories that need improvement that are directly affected by Mutli-Inventory. I know nested queries can be useful but the following query is not ideal. The query take about 6 - 8 seconds to run. I'm hoping there's a better way to do this.
SELECT wp_posts.id
FROM wp_posts
LEFT JOIN wp_term_relationships
ON ( wp_posts.id = wp_term_relationships.object_id )
WHERE 1 = 1
AND ( wp_term_relationships.term_taxonomy_id IN (
25, 450, 580, 582,
585, 591, 593, 33789,
33791, 33792, 33803, 44898,
44941, 45344, 45369, 45636 ) )
AND (( wp_posts.post_type = 'product'
AND ( wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'acf-disabled'
OR wp_posts.post_status = 'private' ) ))
AND ( ( wp_posts.id IN (SELECT DISTINCT pr.post_parent
FROM wp_atum_inventories ati
LEFT JOIN wp_posts pr
ON ati.product_id = pr.id
LEFT JOIN wp_atum_inventory_meta atim
ON ati.id = atim.inventory_id
LEFT JOIN wp_wc_product_meta_lookup pml
ON ati.product_id = pml.product_id
LEFT JOIN wp_atum_product_data apd
ON ati.product_id = apd.product_id
WHERE apd.multi_inventory = 1
AND ( pml.stock_status IN (
'instock', 'onbackorder'
)
OR atim.stock_status IN (
'instock', 'onbackorder'
) )
AND pr.post_parent IS NOT NULL
AND pr.post_parent > 0)
OR wp_posts.id IN (SELECT DISTINCT ati.product_id
FROM wp_atum_inventories ati
LEFT JOIN wp_atum_inventory_meta atim
ON ati.id = atim.inventory_id
LEFT JOIN wp_wc_product_meta_lookup
pml
ON ati.product_id =
pml.product_id
LEFT JOIN wp_atum_product_data apd
ON ati.product_id =
apd.product_id
WHERE apd.multi_inventory = 1
AND ( pml.stock_status IN (
'instock', 'onbackorder'
)
OR atim.stock_status IN (
'instock', 'onbackorder'
) )) )
AND ( wp_posts.id NOT IN (SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN ( 7 )) )
OR ( wp_posts.id IN (SELECT DISTINCT wp_posts.id
FROM wp_posts
LEFT JOIN wp_atum_product_data apd
ON wp_posts.id = apd.product_id
LEFT JOIN wp_wc_product_meta_lookup
pml
ON wp_posts.id = pml.product_id
LEFT JOIN wp_term_relationships
ON ( wp_posts.id =
wp_term_relationships.object_id )
WHERE ( apd.multi_inventory = 0
OR apd.multi_inventory IS NULL )
AND pml.stock_status IN (
'instock', 'onbackorder'
)
AND ( wp_posts.id NOT IN (SELECT
object_id
FROM
wp_term_relationships
WHERE
term_taxonomy_id IN ( 7 )) )
AND (
wp_term_relationships.term_taxonomy_id
IN (
2
, 4
)
)) )
OR ( wp_posts.id NOT IN (SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN ( 7, 9 ))
AND wp_posts.id NOT IN (SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN ( 2, 4 ))
) )
GROUP BY wp_posts.id
ORDER BY wp_posts.post_date DESC,
wp_posts.id DESC