WPIntell

Source evidence

New update – shipping problem

MultiVendorX – WooCommerce Multivendor Marketplace AI Powered Solutions · support · 2026-04-18T17:10:00+00:00

complaintsentiment
highseverity
0.88relevance
26replies
Evidence linked to opportunitycommercial context

Proof Health

Open evidence

Commercial opportunities need traceable source links before they are treated as build-worthy.

3 / 28 rows with source links

10.7% of this page's analysis has direct source links.

0 build-decision rows missing links

0 rows here require auditable proof before promotion.

25 rows with no attached evidence

0 rows have source counts but still need direct links.

Conversation

support
a340300 resolved
I’m facing an issue after updating to 5.0 that prevents me from creating new pages or editing any of my current ones. “Uncaught Error: Call to a member function needs_shipping() on null in [Root]/modules/StoreShipping/Frontend.php on line 170 “. Also, what are the specific meta keys used to store the vendor’s address? I am wondering if these have changed – I had custom tax rules and a snippet to show the address of the vendor in the local pickup shipping option but neither seem to work anymore. Hi @a340300 , Thank you for reaching out and sharing the details of the issue. Regarding the store address, in MultiVendorX 5.0 we have refactored and partially recoded the product and related modules as part of the overall architectural upgrade. This is likely why you are encountering this issue. I have already informed our development team so they can review this more closely. Since you’re also facing issues with page creation and editing, it would really help us if you could share either: A short screen recording showing how the issue occurs, or Any console error logs from your browser This will help us better understand the exact scenario and assist you more efficiently. As for the store (vendor) address meta keys, they are still being saved, but the structure has been streamlined. Currently, the address-related data is stored in the store meta table using the following keys: address city zip country state You can retrieve and render these values directly from the store meta as needed. Please share the additional details when convenient, and we’ll make sure to assist you further. This is the error I get on every page when trying to edit them (it was working up until the update): Uncaught Error: Call to a member function needs_shipping() on null in [REDACTED] / plugins/dc-woocommerce-multi-vendor/modules/StoreShipping/Frontend.php on line 170 Call stack: MultiVendorX\StoreShipping\Frontend::multivendorx_checkout_user_location_fields() wp-includes/class-wp-hook.php:341 WP_Hook::apply_filters() wp-includes/plugin.php:205 apply_filters() wp-content/plugins/woocommerce/includes/class-wc-checkout.php:298 WC_Checkout::initialize_checkout_fields() wp-content/plugins/woocommerce/includes/class-wc-checkout.php:322 WC_Checkout::get_checkout_fields() wp-content/plugins/woocommerce-gateway-stripe/includes/payment-methods/class-wc-stripe-upe-payment-gateway.php:512 WC_Stripe_UPE_Payment_Gateway::javascript_params() wp-content/plugins/woocommerce-gateway-stripe/includes/class-wc-stripe-blocks-support.php:242 WC_Stripe_Blocks_Support::get_gateway_javascript_params() wp-content/plugins/woocommerce-gateway-stripe/includes/class-wc-stripe-blocks-support.php:190 WC_Stripe_Blocks_Support::get_payment_method_data() wp-content/plugins/woocommerce/src/Blocks/Payments/PaymentMethodRegistry.php:62 Automattic\WooCommerce\Blocks\Payments\PaymentMethodRegistry::get_all_registered_script_data() wp-content/plugins/woocommerce/src/Blocks/Payments/Api.php:92 Automattic\WooCommerce\Blocks\Payments\Api::add_payment_method_script_data() wp-includes/class-wp-hook.php:341 WP_Hook::apply_filters() wp-includes/class-wp-hook.php:365 WP_Hook::do_action() wp-includes/plugin.php:522 do_action() wp-content/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php:287 Automattic\WooCommerce\Blocks\BlockTypes\MiniCart::enqueue_data() wp-content/plugins/woocommerce/src/Blocks/BlockTypes/AbstractBlock.php:111 Automattic\WooCommerce\Blocks\BlockTypes\AbstractBlock::enqueue_editor_assets() wp-includes/class-wp-hook.php:341 WP_Hook::apply_filters() wp-includes/class-wp-hook.php:365 WP_Hook::do_action() wp-includes/plugin.php:522 do_action() wp-admin/edit-form-blocks.php:339 require('[REDACTED] / wp-admin/edit-form-blocks.php') wp-admin/post.php:187 I am also wondering if you can suggest a code snippet to force taxes to be calculated based on the vendor’s address when the customer has selected local pickup. I had a snippet that worked before the update but it does not anymore. Thank you! Hello @a340300 , I have shared the error with the team. Regarding the code snippet, can you share the earlier code snippet you had used, so we can see what kind of modification it might require. Thank you! I checked my database from my backup pre-update and this is what I had used to calculate taxes based on the vendor’s store location for local pickup orders rather than the customer’s shipping address: /** * FORCE TAX BY VENDOR LOCATION FOR LOCAL PICKUP */ // 1. Tell WooCommerce NOT to automatically use the main shop base for local pickup add_filter( 'woocommerce_apply_base_tax_for_local_pickup', '__return_false' ); // 2. Inject the Vendor's billing address into the tax calculation add_filter( 'woocommerce_customer_taxable_address', 'mvx_local_pickup_vendor_tax_location', 10, 1 ); function mvx_local_pickup_vendor_tax_location( $address ) { // Only run on frontend checkout/cart updates if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return $address; if ( ! WC()->session ) return $address; $chosen_methods = WC()->session->get( 'chosen_shipping_methods' ); $is_local_pickup = false; // Check if the user selected a local pickup method if ( ! empty( $chosen_methods ) ) { foreach ( $chosen_methods as $method ) { if ( strpos( $method, 'local_pickup' ) !== false ) { $is_local_pickup = true; break; } } } if ( $is_local_pickup && WC()->cart ) { $cart = WC()->cart->get_cart(); foreach ( $cart as $item ) { // Get the vendor for the current product $vendor = get_mvx_product_vendors( $item['product_id'] ); if ( $vendor && isset( $vendor->id ) ) { $vendor_id = $vendor->id; // Pull address from the billing meta keys you identified $country = get_user_meta( $vendor_id, 'billing_country', true ); $state = get_user_meta( $vendor_id, 'billing_state', true ); $postcode = get_user_meta( $vendor_id, 'billing_postcode', true ); $city = get_user_meta( $vendor_id, 'billing_city', true ); // If the vendor has a valid country and state set, use it if ( ! empty( $country ) && ! empty( $state ) ) { return array( $country, $state, $postcode, $city ); } } } } return $address; } Hi @a340300 , Thanks for sharing the code. We can see you’re using WooCommerce hooks/filters to fetch the vendor’s address. You can apply the same logic here. Each product stores the store ID in its meta key multivendorx_store_id . Using this ID, you can fetch the corresponding store details. The address information you’re looking for is saved in the store meta, so once you have the store ID, you can retrieve all address-related data from there. In short: Product → get multivendorx_store_id → use it to fetch store meta → retrieve address fields. Also, we’ll be releasing an update tomorrow that includes a fix for the shipping error. Best regards, Moumita Hi @a340300 , We’ve released an update today. Please make sure to update to the latest version, as it includes the fix for the shipping issue. Thank you very much. I was able to fix the tax issue and the update cleared up the shipping problem! I did have another question: I’d like to add a page where people can search for vendors based on location. It seems this was a shortcode before ( https://multivendorx.com/docs/faqs/how-can-customer-search-vendor-by-location/ ) but it does not seem to work with the new update. Is there a new shortcode I can use to achieve this? Hi @a340300 , Glad to hear the tax and shipping issues are now resolved 🙂 Regarding your query about searching vendors by location — in the latest version, the updated shortcode to display the store list is: [marketplace_stores] To enable location-based filtering/search, please make sure that Geo Location is properly configured from: Settings → Store Configuration → Geo Location Once this is set up, the store listing will support location-based functionality. Let us know if you need any help configuring this further Got it, thank you. Another thing I wanted to mention was that in Settings -> Store Configuration -> Appearance, no matter which option I choose, the store page always has the logo, store name, and description overlayed on top of the banner (like the Luxe display). I wanted to enable the Dynamic option (store info below the banner), but it always appears as the Luxe configuration. I also tried Signature View but they all look like Luxe. <span style=”font-size: inherit;”>Hi</span> @a340300 , <span style=”font-size: inherit;”>Apologies for the delayed response.</span> We have released an update that includes the fix for this issue. Please ensure that you are using <strong data-start=”140″ data-end=”170″>MultiVendorX version 5.0.2 or later. Kindly update and let us know if the issue persists. Thank you for letting me know about the update. I tested my site and it appears that the format still has the store name and logo over the banner instead of below (i.e. no matter what format I choose, it defaults to the style of Luxe Display). A few additional issues/questions When a store adds a product and enables stock management, the product says out of stock even with an SKU and quantity entered. I find that my site runs very slowly now. It takes upwards of 10 seconds to see a store’s page, and the vendor dashboard takes several clicks and several seconds to load a page, add a product, etc. When using the shortcode [marketplace_stores order=”ASC”], the products are displayed and the product title text is very large. Is it possible to just display the store logos and names, rather than showing the products as well? This is just for a page to search vendors, customers can still purchase from the store’s page. This reply was modified 4 weeks ago by a340300 . Hello @a340300 , Thank you for your detailed feedback. Please find our responses below: 1. Store layout (banner, name, and logo position) => It may be due to the theme you are using being block-based. In such cases, the layout is controlled via the block editor. You can edit the Shop page using the block editor and select the appropriate template from there. Here’s a reference: https://www.awesomescreenshot.com/video/52089366?key=f2d55ab07a1fa52558a830734aee98d8 2. Product showing out of stock despite quantity entered => This issue is occurring because the quantity field is not getting saved properly. We have already created a GitHub issue for this, and it will be fixed in an upcoming update. You can track the progress here: https://github.com/multivendorx/multivendorx/issues/1763 3. Site performance (slow loading dashboard and store pages) => This behavior is unexpected, as similar performance issues were addressed in recent updates. Since you are still experiencing this, we recommend reaching out to us directly here ,so our developers can investigate this further on your setup. 4. Shortcode display issue ([marketplace_stores]) We have tested the shortcode and did not encounter this issue, both with the shortcode and block editor usage. You can refer to this example: https://www.awesomescreenshot.com/video/52089296?key=226f1e925385adb8be8807019b2998d3 As this seems specific to your setup, we request you to contact us directly here , so our developers can take a closer look. Please feel free to reach out, and we’ll be happy to assist you further. Thank you, I was able to fix issues 1 & 4! For issue 3: On every page load — including single product pages — the function MultiVendorX\Block->enqueue_all_block_assets() is being called 40 times instead of once. Each call triggers a full chain of database queries including: MultiVendorX\Store\Store::get_store() — 40 to 41 calls MultiVendorX\Store\Store->get_all_meta() — 40 to 41 calls (including repeated calls for store_id = 0) WC_Shipping_Zone_Data_Store->get_zones() — 40 to 41 calls WC_Shipping_Zone_Data_Store->get_zone_data_for_ids() — 80 to 82 calls WC_Shipping_Zone_Data_Store->get_zone_locations_for_ids() — 80 to 82 calls WC_Shipping_Zone_Data_Store->get_methods() — 80 to 82 calls This results in 450+ duplicate queries on all pages, causing 20-second load times and frequent 502...

Comments

26 shown
mouindi 2026-04-18T17:50:00+00:00

Hi @a340300 , Thank you for reaching out and sharing the details of the issue. Regarding the store address, in MultiVendorX 5.0 we have refactored and partially recoded the product and related modules as part of the overall architectural upgrade. This is likely why you are encountering this issue. I have already informed our development team so they can review this more closely. Since you’re also facing issues with page creation and editing, it would really help us if you could share either: A short screen recording showing how the issue occurs, or Any console error logs from your browser This will help us better understand the exact scenario and assist you more efficiently. As for the store (vendor) address meta keys, they are still being saved, but the structure has been streamlined. Currently, the address-related data is stored in the store meta table using the following keys: address city zip country state You can retrieve and render these values directly from the store meta as needed. Please share the additional details when convenient, and we’ll make sure to assist you further.

a340300 2026-04-18T20:38:00+00:00

This is the error I get on every page when trying to edit them (it was working up until the update): Uncaught Error: Call to a member function needs_shipping() on null in [REDACTED] / plugins/dc-woocommerce-multi-vendor/modules/StoreShipping/Frontend.php on line 170 Call stack: MultiVendorX\StoreShipping\Frontend::multivendorx_checkout_user_location_fields() wp-includes/class-wp-hook.php:341 WP_Hook::apply_filters() wp-includes/plugin.php:205 apply_filters() wp-content/plugins/woocommerce/includes/class-wc-checkout.php:298 WC_Checkout::initialize_checkout_fields() wp-content/plugins/woocommerce/includes/class-wc-checkout.php:322 WC_Checkout::get_checkout_fields() wp-content/plugins/woocommerce-gateway-stripe/includes/payment-methods/class-wc-stripe-upe-payment-gateway.php:512 WC_Stripe_UPE_Payment_Gateway::javascript_params() wp-content/plugins/woocommerce-gateway-stripe/includes/class-wc-stripe-blocks-support.php:242 WC_Stripe_Blocks_Support::get_gateway_javascript_params() wp-content/plugins/woocommerce-gateway-stripe/includes/class-wc-stripe-blocks-support.php:190 WC_Stripe_Blocks_Support::get_payment_method_data() wp-content/plugins/woocommerce/src/Blocks/Payments/PaymentMethodRegistry.php:62 Automattic\WooCommerce\Blocks\Payments\PaymentMethodRegistry::get_all_registered_script_data() wp-content/plugins/woocommerce/src/Blocks/Payments/Api.php:92 Automattic\WooCommerce\Blocks\Payments\Api::add_payment_method_script_data() wp-includes/class-wp-hook.php:341 WP_Hook::apply_filters() wp-includes/class-wp-hook.php:365 WP_Hook::do_action() wp-includes/plugin.php:522 do_action() wp-content/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php:287 Automattic\WooCommerce\Blocks\BlockTypes\MiniCart::enqueue_data() wp-content/plugins/woocommerce/src/Blocks/BlockTypes/AbstractBlock.php:111 Automattic\WooCommerce\Blocks\BlockTypes\AbstractBlock::enqueue_editor_assets() wp-includes/class-wp-hook.php:341 WP_Hook::apply_filters() wp-includes/class-wp-hook.php:365 WP_Hook::do_action() wp-includes/plugin.php:522 do_action() wp-admin/edit-form-blocks.php:339 require('[REDACTED] / wp-admin/edit-form-blocks.php') wp-admin/post.php:187

a340300 2026-04-18T21:22:00+00:00

I am also wondering if you can suggest a code snippet to force taxes to be calculated based on the vendor’s address when the customer has selected local pickup. I had a snippet that worked before the update but it does not anymore. Thank you!

mouindi 2026-04-19T02:57:00+00:00

Hello @a340300 , I have shared the error with the team. Regarding the code snippet, can you share the earlier code snippet you had used, so we can see what kind of modification it might require.

a340300 2026-04-19T06:24:00+00:00

Thank you! I checked my database from my backup pre-update and this is what I had used to calculate taxes based on the vendor’s store location for local pickup orders rather than the customer’s shipping address: /** * FORCE TAX BY VENDOR LOCATION FOR LOCAL PICKUP */ // 1. Tell WooCommerce NOT to automatically use the main shop base for local pickup add_filter( 'woocommerce_apply_base_tax_for_local_pickup', '__return_false' ); // 2. Inject the Vendor's billing address into the tax calculation add_filter( 'woocommerce_customer_taxable_address', 'mvx_local_pickup_vendor_tax_location', 10, 1 ); function mvx_local_pickup_vendor_tax_location( $address ) { // Only run on frontend checkout/cart updates if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return $address; if ( ! WC()->session ) return $address; $chosen_methods = WC()->session->get( 'chosen_shipping_methods' ); $is_local_pickup = false; // Check if the user selected a local pickup method if ( ! empty( $chosen_methods ) ) { foreach ( $chosen_methods as $method ) { if ( strpos( $method, 'local_pickup' ) !== false ) { $is_local_pickup = true; break; } } } if ( $is_local_pickup && WC()->cart ) { $cart = WC()->cart->get_cart(); foreach ( $cart as $item ) { // Get the vendor for the current product $vendor = get_mvx_product_vendors( $item['product_id'] ); if ( $vendor && isset( $vendor->id ) ) { $vendor_id = $vendor->id; // Pull address from the billing meta keys you identified $country = get_user_meta( $vendor_id, 'billing_country', true ); $state = get_user_meta( $vendor_id, 'billing_state', true ); $postcode = get_user_meta( $vendor_id, 'billing_postcode', true ); $city = get_user_meta( $vendor_id, 'billing_city', true ); // If the vendor has a valid country and state set, use it if ( ! empty( $country ) && ! empty( $state ) ) { return array( $country, $state, $postcode, $city ); } } } } return $address; }

mouindi 2026-04-20T12:37:00+00:00

Hi @a340300 , Thanks for sharing the code. We can see you’re using WooCommerce hooks/filters to fetch the vendor’s address. You can apply the same logic here. Each product stores the store ID in its meta key multivendorx_store_id . Using this ID, you can fetch the corresponding store details. The address information you’re looking for is saved in the store meta, so once you have the store ID, you can retrieve all address-related data from there. In short: Product → get multivendorx_store_id → use it to fetch store meta → retrieve address fields. Also, we’ll be releasing an update tomorrow that includes a fix for the shipping error. Best regards, Moumita

mouindi 2026-04-21T10:37:00+00:00

Hi @a340300 , We’ve released an update today. Please make sure to update to the latest version, as it includes the fix for the shipping issue.

a340300 2026-04-21T16:24:00+00:00

Thank you very much. I was able to fix the tax issue and the update cleared up the shipping problem! I did have another question: I’d like to add a page where people can search for vendors based on location. It seems this was a shortcode before ( https://multivendorx.com/docs/faqs/how-can-customer-search-vendor-by-location/ ) but it does not seem to work with the new update. Is there a new shortcode I can use to achieve this?

mouindi 2026-04-21T17:54:00+00:00

Hi @a340300 , Glad to hear the tax and shipping issues are now resolved 🙂 Regarding your query about searching vendors by location — in the latest version, the updated shortcode to display the store list is: [marketplace_stores] To enable location-based filtering/search, please make sure that Geo Location is properly configured from: Settings → Store Configuration → Geo Location Once this is set up, the store listing will support location-based functionality. Let us know if you need any help configuring this further

a340300 2026-04-21T19:17:00+00:00

Got it, thank you. Another thing I wanted to mention was that in Settings -> Store Configuration -> Appearance, no matter which option I choose, the store page always has the logo, store name, and description overlayed on top of the banner (like the Luxe display). I wanted to enable the Dynamic option (store info below the banner), but it always appears as the Luxe configuration. I also tried Signature View but they all look like Luxe.

mouindi 2026-04-30T13:13:00+00:00

<span style=”font-size: inherit;”>Hi</span> @a340300 , <span style=”font-size: inherit;”>Apologies for the delayed response.</span> We have released an update that includes the fix for this issue. Please ensure that you are using <strong data-start=”140″ data-end=”170″>MultiVendorX version 5.0.2 or later. Kindly update and let us know if the issue persists.

a340300 2026-04-30T20:19:00+00:00

Thank you for letting me know about the update. I tested my site and it appears that the format still has the store name and logo over the banner instead of below (i.e. no matter what format I choose, it defaults to the style of Luxe Display).

a340300 2026-04-30T22:52:00+00:00

A few additional issues/questions When a store adds a product and enables stock management, the product says out of stock even with an SKU and quantity entered. I find that my site runs very slowly now. It takes upwards of 10 seconds to see a store’s page, and the vendor dashboard takes several clicks and several seconds to load a page, add a product, etc. When using the shortcode [marketplace_stores order=”ASC”], the products are displayed and the product title text is very large. Is it possible to just display the store logos and names, rather than showing the products as well? This is just for a page to search vendors, customers can still purchase from the store’s page. This reply was modified 4 weeks ago by a340300 .

mouindi 2026-05-01T02:46:00+00:00

Hello @a340300 , Thank you for your detailed feedback. Please find our responses below: 1. Store layout (banner, name, and logo position) => It may be due to the theme you are using being block-based. In such cases, the layout is controlled via the block editor. You can edit the Shop page using the block editor and select the appropriate template from there. Here’s a reference: https://www.awesomescreenshot.com/video/52089366?key=f2d55ab07a1fa52558a830734aee98d8 2. Product showing out of stock despite quantity entered => This issue is occurring because the quantity field is not getting saved properly. We have already created a GitHub issue for this, and it will be fixed in an upcoming update. You can track the progress here: https://github.com/multivendorx/multivendorx/issues/1763 3. Site performance (slow loading dashboard and store pages) => This behavior is unexpected, as similar performance issues were addressed in recent updates. Since you are still experiencing this, we recommend reaching out to us directly here ,so our developers can investigate this further on your setup. 4. Shortcode display issue ([marketplace_stores]) We have tested the shortcode and did not encounter this issue, both with the shortcode and block editor usage. You can refer to this example: https://www.awesomescreenshot.com/video/52089296?key=226f1e925385adb8be8807019b2998d3 As this seems specific to your setup, we request you to contact us directly here , so our developers can take a closer look. Please feel free to reach out, and we’ll be happy to assist you further.

a340300 2026-05-03T19:31:00+00:00

Thank you, I was able to fix issues 1 & 4! For issue 3: On every page load — including single product pages — the function MultiVendorX\Block->enqueue_all_block_assets() is being called 40 times instead of once. Each call triggers a full chain of database queries including: MultiVendorX\Store\Store::get_store() — 40 to 41 calls MultiVendorX\Store\Store->get_all_meta() — 40 to 41 calls (including repeated calls for store_id = 0) WC_Shipping_Zone_Data_Store->get_zones() — 40 to 41 calls WC_Shipping_Zone_Data_Store->get_zone_data_for_ids() — 80 to 82 calls WC_Shipping_Zone_Data_Store->get_zone_locations_for_ids() — 80 to 82 calls WC_Shipping_Zone_Data_Store->get_methods() — 80 to 82 calls This results in 450+ duplicate queries on all pages, causing 20-second load times and frequent 502 bad gateway errors. Query Monitor shows all of these trace back to enqueue_all_block_assets() being called in a loop — apparently once per registered block rather than once per page. This occurs on all pages from those with vendor content (like vendor storefronts, product pages) to simple pages without any vendor data like ‘about us’ and the privacy policy This reply was modified 3 weeks, 4 days ago by a340300 . This reply was modified 3 weeks, 4 days ago by a340300 . This reply was modified 3 weeks, 4 days ago by a340300 .

mouindi 2026-05-04T05:32:00+00:00

@a340300 , Sorry to hear that you’ve encountered this issue. We’ve created a GitHub issue to track it, and you can follow the progress here: https://github.com/multivendorx/multivendorx/issues/1768

a340300 2026-05-04T18:29:00+00:00

Thank you! I see it was closed, does that mean it will be pushed in the next update? Also, in the Product Category block in the store’s sidebar, is there a way to nest the subcategories? For example, it currently looks like Category Subcategory instead of Category Subcategory

mouindi 2026-05-05T08:11:00+00:00

Hi @a340300 , We were able to reproduce the issue on our end. Our team has created a GitHub issue to track and resolve this. You can follow the progress specific to your case here: https://github.com/multivendorx/multivendorx/issues/1772 We’ll keep you updated as we work on a fix.

a340300 2026-05-06T21:07:00+00:00

I see that issue was fixed in 5.0.4, thank you! Some of the repeated database query issues were fixed, and I noticed that the load time to view a store’s page went from 17-20 seconds to about 8. However, Query monitor shows about 7200 duplicate queries when trying to view a store’s page: MultiVendorX\Store\Store->get_meta — 3,201 calls (1.76s) MultiVendorX\Store\Store->get_all_meta — 1,074 calls (0.65s) MultiVendorX\Store\Store->load — 1,049 calls (0.63s) MultiVendorX\StoreReview\Util::get_reviews_by_store — 300 calls (0.18s) MultiVendorX\StoreReview\Util::get_overall_rating — 300 calls (0.17s) MultiVendorX\Store\StoreUtil::get_primary_owner — 300 calls (0.16s) MultiVendorX\Store\StoreUtil::get_store_users — 300 calls (0.15s) MultiVendorX\Store\Store::get_store — 147 calls (0.08s) Automattic\WooCommerce\Internal\DataStores\Orders\OrdersTableDataStore->get_orders_type — 50 calls (0.03s) WC_Shipping_Zone_Data_Store->get_methods — 50 calls (0.03s) WC_Shipping_Zone_Data_Store->get_zone_data_for_ids — 50 calls (0.03s) WC_Shipping_Zone_Data_Store->get_zone_locations_for_ids — 50 calls (0.03s) WC_Shipping_Zone_Data_Store->get_zones — 25 calls BUG 1: FrontendScripts::localize_scripts() renders the full product loop inside wp_head() I traced the following call stack via Query Monitor: wp_head() → wp_enqueue_scripts() → FrontendScripts::localize_scripts() → StoreUtil::get_specific_store_info() → loads store-tabs.php → loops through every product via content-product.php → fires add_sold_by_in_shop_and_single_product_page() per product → calls get_reviews_by_store(), get_overall_rating(), user_has_product() per product This means the entire product loop — including reviews, store info, and wishlist checks — is being executed inside wp_head() before the page has even rendered, purely to gather JavaScript localization data. This results in the following queries firing once per product: MultiVendorX\StoreReview\Util::get_reviews_by_store — 300 calls (0.18s) MultiVendorX\StoreReview\Util::get_overall_rating — 300 calls (0.17s) MultiVendorX\Store\StoreUtil::get_primary_owner — 300 calls (0.16s) MultiVendorX\Store\StoreUtil::get_store_users — 300 calls (0.15s) NMGR\Lib\AddToWishlist->user_has_product — 300 calls (0.25s) localize_scripts() should pass simple scalar variables to JavaScript, not render full templates. BUG 2: Store->load() has no internal object caching On a single store page load, the following query runs 1,048 times: SELECT * FROM wp_multivendorx_stores WHERE ID = 1 This is the same row, for the same store, fetched over a thousand times in one request because Store->load() performs a fresh database query every time it is called with no in-memory caching. The same pattern applies to related functions: MultiVendorX\Store\Store->get_meta — 3,201 calls (1.76s) MultiVendorX\Store\Store->get_all_meta — 1,074 calls (0.65s) MultiVendorX\Store\Store->load — 1,049 calls (0.63s) MultiVendorX\Store\Store::get_store — 147 calls (0.08s)

a340300 2026-05-06T23:48:00+00:00

I also tried placing a test order with two products (each from different vendors), and in “Customer-facing order presentation & invoicing” I had opted for “Main Order (Combined)- Customers receive one combined order and one invoice for their entire purchase.” However, I got two emails, one for each product (and two different order numbers). How can I send one main email, and separately, where can I edit the look of the emails? This reply was modified 3 weeks ago by a340300 .

mouindi 2026-05-07T05:39:00+00:00

Hi @a340300 , Thank you for reporting this. We were able to identify this as a bug. Even when “Main Order (Combined)” is selected under “Customer-facing order presentation & invoicing,” the system is currently sending separate emails for each vendor order instead of a single combined email. Our team is already aware of the issue, and we will be fixing this in an upcoming update. For now, you can track the progress of this issue here: https://github.com/multivendorx/multivendorx/issues/1796 Regarding email design/customization, goto MultiVendorX >> Settings >> Notifications >> Event Rules >> Here you will see all the mails sent. You can click on the “Bell” icon to edit the email template, as shown here – https://prnt.sc/SopZpGnujat7 Regarding the repeated queries shown in Query Monitor, our current primary focus is to ensure that the plugin is fully stable and that all users are able to migrate successfully to MultiVendorX 5.0.0 without functional issues. Now that the major migration and compatibility work is gradually stabilizing, we will start focusing more on query optimization and performance improvements in the upcoming updates. We appreciate you sharing the Query Monitor findings, as this helps our team identify areas that need further optimization.

a340300 2026-05-07T22:33:00+00:00

Thank you for flagging the bug! For the emails, when a test order is placed through a vendor, the emails (both customer and store/vendor emails) are not rendering product details correctly. Specifically, product image is displayed correctly but the product name/price/quantity is missing, as is the subtotal, shipping, etc. I confirmed the following: Using the WP Mail Logging plugin, the raw email content shows that all product details (name, quantity, price, subtotal, etc.) are present in the generated email HTML The issue only occurs in the final rendered email received by the customer/vendor (tested both iCloud and gmail emails) WooCommerce email templates are not overridden in my theme (checked under WooCommerce → Status → Templates) Is this a bug you can replicate on your end?

mouindi 2026-05-08T06:04:00+00:00

Hello @a340300 , Thank you for getting in touch, and we are sorry to hear that you are experiencing this issue. We tested the functionality on our end and found that the order details are rendering correctly in the delivered emails as expected. Please refer to the following screenshots for reference: Order details: https://prnt.sc/sihlr0WL64ad Final delivered email: https://www.awesomescreenshot.com/image/60331116?key=7fdcc0090fe0f066005a9f1fa21b7b56 Since the issue does not appear to be reproducible on our side, it may be specific to your current environment or email setup. To help isolate the issue, could you please try the following on your staging site: Temporarily disable MultiVendorX Place a test order for an admin product (non-vendor product) Check whether the same issue occurs in the WooCommerce order emails This will help determine whether the issue is related to WooCommerce email rendering in general or specifically connected to marketplace/vendor emails. Also, we kindly request you to open a new support thread for this issue. This helps keep discussions organized and makes it easier for other users facing similar issues to find related support topics and possible solutions in the future. We look forward to your response.

mouindi 2026-05-13T06:48:00+00:00

Hi @a340300 , We have released a new update (5.0.5) for MultiVendorX where our team has worked on additional optimizations and performance improvements. Kindly update to the latest version on your end and check if the fixes are reflected properly. Please let us know your feedback after testing.

a340300 2026-05-13T18:56:00+00:00

I just updated and the site seems much quicker now. However, I still get emails for both the main order and sub order even though I have configured the settings to send the main order email only. Also, I was wondering what the shortcakes are for the vendor registration. The settings mention both [store_registration] and [marketplace_registration], but [store_registration] appears as plaintext when I preview the page, and [marketplace_registration] loads for a while before timing out and sending my back to my WordPress admin dashboard.

mouindi 2026-05-14T08:37:00+00:00

Hi @a340300 , First of all, thank you for continuously testing the plugin and helping us improve MultiVendorX with your detailed feedback. We truly appreciate your support and patience during this transition phase. We’re also glad to hear that the latest update improved the site performance on your end. Regarding the email issue, we’re sorry for the confusion. The fix for sending only the main order email (instead of both main order and sub-order emails) was not included in the last update. This improvement is currently scheduled for the next release, and you can also track the progress here: https://github.com/multivendorx/multivendorx/issues/1796 Regarding the shortcode: The correct shortcode for vendor/store registration is: [marketplace_registration] There is currently a typo in the settings page where [store_registration] is mentioned. This will be corrected in the next update. Also, please note that if you are trying to access the registration page while logged in as an administrator, the page will not load properly because admins are not allowed to register as store owners/vendors. The registration page is intended only for non-admin users. Regarding the loading/timing-out issue before the content displays, our team has identified this behavior as well, and we will be addressing it in the upcoming update. You can also track the progress of this issue on GitHub here: https://github.com/multivendorx/multivendorx/issues/1851 Additionally, you can view the complete list of available MultiVendorX shortcodes here: MultiVendorX Shortcode List