Расширение хранилищ данных CRUD в WooCommerce
Опубликовано: 2018-01-25Вы слышали о CRUD? В программировании это означает создание , чтение , обновление и удаление — основные операции, которые мы все выполняем с нашими данными. С WooCommerce это включает продукты, заказы, клиентов, купоны и другие данные, хранящиеся в вашей базе данных.
Недавние изменения в WooCommerce, связанные с CRUD, означают, что платформа находится на пути к тому, чтобы стать более масштабируемой. Примечание. Этот пост носит технический характер и предполагает определенный уровень комфорта при работе с PHP-кодом.
Аудио-ученик? Тезисы в этом посте взяты из моего выступления на WooConf 2017.
Более масштабируемый WooCommerce
Чтобы облегчить жизнь нашим разработчикам, мы добавили специальные объекты CRUD в WooCommerce 3.0. Это заменяет весь предыдущий метакод сообщений в WooCommerce, а также должно использоваться всеми расширениями, чтобы обеспечить масштабирование сайта WooCommerce.
В то же время мы добавили еще один набор объектов, называемых хранилищами данных, которые предназначены для загрузки и сохранения ваших данных WooCommerce в базе данных и из нее. Эти абстракции предназначены для того, чтобы позволить WooCommerce обрабатывать большее количество заказов, продуктов и клиентов. Это достигается путем подключения к WooCommerce, чтобы он использовал разные средства для хранения данных.
Каждая реализация хранилища данных определяет, как данные хранятся и извлекаются, будь то из базы данных или другого способа хранения данных. Используя их, теперь можно масштабировать WooCommerce до объемов продаж предприятия с реализациями, которые могут обрабатывать миллионы заказов. Все, что нужно сделать, — это подключиться к фильтру, который переопределяет то, что WooCommerce использует для хранения данных.
В дополнение к повышению производительности, которые могут обеспечить абстракции CRUD и хранилища данных, эти конструкции обеспечивают гораздо большую гибкость в том, как вы сохраняете и загружаете данные для своего магазина WooCommerce. Для каждого типа данных WooCommerce (продукты, заказы, клиенты и т. д.) теперь у вас есть возможность программно решить, откуда эти данные должны поступать и куда они должны идти. Это позволяет создателям магазинов настраивать WooCommerce в соответствии со своими потребностями, взаимодействуя с другими системами, или повышать производительность различных частей WooCommerce по мере необходимости.
В дополнение к повышению производительности, которые могут обеспечить абстракции CRUD и хранилища данных, эти конструкции обеспечивают гораздо большую гибкость в том, как вы сохраняете и загружаете данные для своего магазина WooCommerce.
Что именно это означает? Что ж, подумайте о возможностях:
- Сохранение данных о заказе в отдельной базе от wpdb.
- Получение данных о продукте из существующей базы данных в другой системе.
- Совместное использование товарных запасов на нескольких сайтах (пример ниже).
Получение данных о продукте через API из другого источника.
Создание команды CLI для загрузки из одного хранилища данных и сохранения в другое (встроенный импорт/экспорт).
Расширение хранилищ данных
С абстракциями CRUD и хранилища данных WooCommerce больше не волнует, откуда берутся данные или как они сохраняются. Вы можете контролировать все это сами.
В приведенном ниже примере я получаю количество запасов из отдельной службы, и изменяется только количество запасов каждого объекта продукта. Одним из преимуществ этого является то, что я могу продавать несколько сайтов WooCommerce из одного и того же запаса и быть уверенным, что мои акции не перепроданы.
Вот точка входа, фильтр install_data_store
.
Для фактического хранилища данных необходимо реализовать два интерфейса: WC_Object_Data_Store_Interface
и WC_Product_Data_Store_Interface
.
Это хранилище данных предназначено для расширения существующего хранилища данных (обычно это мета-реализация поста по умолчанию). Он берет существующее хранилище данных в своем конструкторе и только изменяет способ обработки запасов. Все остальное обычно обрабатывается через существующее хранилище данных.
Для большинства необходимых функций это хранилище данных просто вызывает родительское хранилище данных:
Единственное изменение, которое вводит это хранилище данных, — это то, как считывается инвентарь. В этом случае он обычно читает из родительского хранилища данных, но переопределяет количество запасов перед возвратом:
С абстракциями CRUD и хранилища данных WooCommerce больше не волнует, откуда берутся данные или как они сохраняются. Вы можете контролировать все это сами.
Количество запасов, указанное выше, извлекается из API. В реальном приложении этот вызов API может перейти к системе управления запасами, POS-терминалу или даже другому сайту WooCommerce.
Полный код для приведенного выше примера доступен по адресу: https://github.com/coderkevin/woocommerce-product-inventory-datastore.
Бесконечные возможности с объектами CRUD и хранилищами данных
Как показано в приведенных выше примерах, возможности безграничны. WooCommerce 3.3, который должен быть выпущен 30 января, содержит еще одну захватывающую веху, связанную с CRUD. Подробнее: WooCommerce 3.3 Новые вебхуки CRUD.
Используйте свое воображение, чтобы создавать решения для данных новыми и интересными способами с объектами CRUD и хранилищами данных, и обязательно сообщите нам, как вы поживаете, либо в комментариях, либо присоединившись к сообществу WooCommerce Slack.