План по переходу WooCommerce на произвольную таблицу заказов

Рейтинг: 4.9 из 75 оценок

На протяжении многих лет мы часто получали запросы на реализацию пользовательских таблиц для различных сущностей WooCommerce (заказы, товары, купоны и т.д.).

Это то, что мы также хотели сделать в течение некоторого времени, но до сих пор уклонялись от фактической реализации в основном из-за сложности внесения такого рода изменений без негативного влияния на существующие сайты и расширения.

В этой записи мы с большим воодушевлением сообщаем, что начали работу над реализацией пользовательских таблиц для заказов. Это сложный проект, поэтому мы будем часто обращаться к вам за обратной связью по мере реализации.

Предыстория

В 2017 году была выпущена версия WooCommerce 3.0. В этом релизе были введены классы CRUD, которые обеспечивают абстракцию над прямым доступом к базе данных. Это было сделано для того, чтобы обеспечить возможность миграции на различные хранилища данных для объектов, использующих уровень CRUD в дальнейшем, таких как товары, заказы или купоны.

Мы по-прежнему используем структуры таблиц wp_post и wp_postmeta для хранения этой информации для магазинов WooCommerce даже с уровнем CRUD. Хотя эти API и таблицы, предоставляемые WordPress, хорошо служили нам на протяжении многих лет, теперь мы хотим сделать еще один шаг вперед, создав надежную и простую для понимания структуру базы данных, специально разработанную для нужд коммерции.

Есть 3 основных свойства, которые мы хотели бы улучшить, добавив таблицы пользовательских заказов в ядро WC:

  • Масштабируемость — имея выделенные таблицы (и, следовательно, выделенные индексы, менее загруженные таблицы, меньше операций чтения/записи и т.д.), мы стремимся позволить магазинам любого размера масштабироваться дальше без необходимости вмешательства экспертов.
  • Простота — независимость от постов WP должна помочь найти, где живут базовые данные, понять их структуру и позволить разработчикам модифицировать WooCommerce с большей изощренностью.
  • Надежность — должно быть проще делать и восстанавливать целевые резервные копии, реализовывать блокировки чтения/записи и предотвращать условия гонки.

Мы стремимся завершить первоначальную реализацию к началу третьего квартала 2022 года.

Обратная совместимость

В рамках данного проекта мы ожидаем, что разработчикам расширений и пользовательского кода может потребоваться некоторая работа, чтобы в полной мере воспользоваться преимуществами новой структуры таблиц. По мере реализации проекта мы планируем публиковать руководства по обновлению для поддержки внедрения пользовательских таблиц заказов.

Во время развертывания мы стремимся к тому, чтобы вначале эта функция была строго опциональной, что даст всем достаточно времени для обеспечения совместимости своих магазинов.

Схема базы данных

Это первый черновик базы данных, который мы хотели бы предложить для создания пользовательских таблиц. Пожалуйста, добавьте любые замечания, которые у вас могут быть, в виде комментария к этому сообщению.

Общая структура

Мы предполагаем, что общая структура таблиц для заказов будет состоять из:

  1. Основные таблицы: Как следует из названия, эти таблицы будут хранить свойства заказов, которые определены ядром WooCommerce. Сюда входят поля из таблицы post, а также большинство полей из таблицы meta. Эта группа таблиц является основной целью проекта, и мы будем переносить данные в эти таблицы.
  2. Дополнительные таблицы плагинов: В новой структуре мы рекомендуем плагинам WooCommerce, которым необходимо хранить частые данные для каждого заказа, также перенести свои собственные таблицы. В настоящее время нет установленного стандарта, поэтому многие плагины в конечном итоге хранят данные непосредственно в таблицах постов, как и мы.
  3. В рамках этого проекта мы также планируем создать руководства и инструменты для облегчения создания и переноса данных в эти таблицы. Это не является обязательным требованием, но рекомендуется для поддержания работоспособности магазинов, использующих эти плагины.
  4. Мета-таблица: Даже при наличии основных таблиц и рекомендаций для таблиц плагинов, мы предоставляем мета-таблицу. Она должна служить хранилищем для любых одноразовых значений, которые должны быть связаны с заказами. Кроме того, мы будем использовать эту таблицу в качестве резервного места для переноса метаданных, которые не являются частью основной модели заказов.

С помощью этой структуры таблиц мы надеемся добиться прогресса в достижении наших целей по масштабируемости, надежности и простоте. Как всегда, мы будем рады любым отзывам и предложениям, чтобы сделать это лучше.

Предлагаемая структура таблицы для данных заказа

Таблицы, которые являются частью основных данных и метаданных, следующие:

  1. wp_wc_orders: В этой таблице мы размещаем большинство текущих основных полей и важных мета-ключей.
  2. wp_wc_order_addresses: Мы используем эту таблицу для хранения адресов, связанных с заказами (например, адреса доставки и выставления счетов).
  3. wp_wc_orders_meta: Эта таблица аналогична по функциональности таблице wp_postmeta и позволяет расширениям хранить одноразовые данные, связанные с заказами.

Как было сказано выше, мы рекомендуем плагинам, хранящим большое количество данных в таблице post meta, иметь вместо нее специальную таблицу. Мы по-прежнему будем использовать wp_wc_orders_meta в качестве резервного решения для хранения любых данных для расширений, которые не мигрировали, но мы рекомендуем разработчикам не использовать ее для обычных значений, связанных с заказами.

Следующие шаги

Мы используем эту доску проекта на GitHub для управления проектом, вы можете следить за проектом и предоставлять обратную связь по мере его реализации. В настоящее время мы работаем над подготовкой MVP-реализации, чтобы мы могли более детально оценить и изменить проект.

Мы также продолжим сообщать в этом блоге обо всех важных событиях и заметках по обновлению по мере их появления.

Читайте далее

Добавить комментарий