Skip to content
Implements new data-stores and moves product data into custom tables, with a new, normalised data structure.
PHP Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
tests Remove todos Jun 22, 2018
.editorconfig Basic structure Oct 16, 2017
.gitignore Use Huskey for pre-commit hooks Sep 3, 2019
.travis.yml Configure Travis to run PHPCS checks Apr 4, 2018
LICENSE Initial commit Oct 16, 2017 Update readme May 31, 2018
composer.json Update dependency woocommerce/woocommerce-sniffs to v0.0.9 Nov 11, 2019
composer.lock Update dependency woocommerce/woocommerce-sniffs to v0.0.9 Nov 11, 2019
package-lock.json Update dependency lint-staged to v9.4.3 Nov 14, 2019
package.json Update dependency lint-staged to v9.4.3 Nov 14, 2019
phpcs.xml Updated phpcs.xml Sep 3, 2019
phpunit.xml Include custom product tables tests in the phpunit.xml file Apr 24, 2018
renovate.json Add renovate.json Sep 3, 2019
woocommerce-product-tables-feature-plugin.php Use WC_Admin_Notices::add_custom_notice instead of add_notice Jul 30, 2018

WooCommerce Product Tables

This is the development repository for our feature plugin to replace WooCommerce product meta data with custom tables. This feature plugin is currently only available on GitHub, but will move to when more stable.

Since we implemented CRUD objects in WooCommerce core, our plan has been to use that abstraction to change core data structures for performance reasons. This project brings about those changes.

Data stucture

This plugin creates dedicated tables for WooCommerce data.

  • wc_products - Stores product data such as price, stock, and type. This replaces meta data. Products are linked to POSTS by ID still so some backwards compatibility is maintained.
  • wc_product_attributes - Stores attributes assigned to products. This includes custom attributes, and global attributes (taxonomies).
  • wc_product_attribute_values - Store attribute terms/values assigned to products.
  • wc_product_downloads - Stores downloadable files assigned to downloadable products.
  • wc_product_relationships - Lookup table to map images, grouped products, upsells, and other relations between products by ID.
  • wc_product_variation_attribute_values - Specifically for variations, this stores the attribute value assigned to a variation. e.g. Color = blue.


With data moving to custom tables, WordPress based functions which query data directly will ultimately not be compatible with this new way of doing things. This is why the CRUD was implemented first to act as a method of abstraction.

A basic compatibility layer will map meta data to custom tables if legacy plugins try to do that, however, this can only work so far. Things such as direct SQL queries, or using WP_Query without going through WooCommerce may no longer be compatible.

In terms of data, we aim to have both on the fly and bulk migration of data into the new structures.

Get involved

This project is a large undertaking, and we believe it to be a neccessary one. This project should serve as a template for other objects in WooCommerce and pave the way for a truly performant plugin.

You can’t perform that action at this time.