Перенос интернет-магазина Yoast.com с EDD на WooCommerce
Опубликовано: 2018-02-27В Yoast мы оптимизируем каждый аспект производительности веб-сайтов. Наша цель — сделать Интернет лучше, сделав веб-сайты более удобными, удобными для навигации, быстрыми и надежными.
В сентябре 2017 года мы перенесли наш интернет-магазин с Easy Digital Downloads (EDD) на WooCommerce — здесь мы продаем все инструменты, продукты и контент, доступные на yoast.com. В этом посте я объясню, почему мы это сделали, что мы создали и какие преимущества будут для нас и наших пользователей в будущем. WooCommerce предоставила нам техническую основу, на которую можно опираться на долгие годы.
Почему изменение?
Yoast.com переживает невероятный рост благодаря двум основным компонентам — популярности нашего плагина и растущей аудитории нашего SEO-блога. Однако сочетание этих двух элементов делает yoast.com сложным в управлении веб-сайтом.
Исторически сайт развился из простой установки WordPress. Easy Digital Downloads (EDD) был добавлен основателем Yoast Йостом де Валком для облегчения продажи плагинов премиум-класса. Мы также использовали EDD для доставки обновлений для всех установок Premium в мире.
За прошедшие годы мы сделали все больше и больше настроек, чтобы убедиться, что EDD по-прежнему может удовлетворять наши потребности. Например, сделать так, чтобы наши клиенты могли платить в евро или долларах, стоило огромных усилий. Поскольку в будущем мы хотели добавить другие валюты, нам нужно было найти другое решение.
Когда мы рассматривали другие варианты, мы учитывали несколько потребностей:
- Возможность поддерживать мультивалютные покупки.
- Возможность поддерживать регулярные платежи.
- Стоимость построения интеграции и ремонтопригодность платформы.
- Возможность поддержки учетных записей пользователей.
- Создание SEO-платформы.
- С учетом будущей совместимости, так как мы хотим иметь сайт, который будет работать и через 5-10 лет.
Чтобы достичь всего вышеперечисленного, нам нужно было придумать план.
идея
В январе 2017 года мы запланировали встречу с нашей командой архитекторов: Йоостом, Омаром, Джипом и мной. Мы обсудили наши потребности и способы их удовлетворения.
Первым нашим выводом было то, что мы не хотим уходить от WordPress. Несмотря на то, что теперь у нас есть плагины для других платформ, мы являемся поклонниками WordPress и глубоко заботимся о его миссии. WordPress — это то место, где наши корни, и он очень хорошо зарекомендовал себя как CMS.
Почему WooCommerce?
Затем мы рассмотрели, какую платформу электронной коммерции мы хотели бы использовать. Мы спросили себя, какое решение для электронной коммерции лучше всего подходит для WordPress, и пришли к выводу, что это WooCommerce. Но, как и EDD, WooCommerce не поддерживает несколько валют. Поэтому нам нужно было решение.
Я большой поклонник идеи, что все это ремиксы. Мы были вдохновлены идеей использовать разные сайты для каждого языка, идея, которая хорошо реализована плагином MultilingualPress. Поэтому мы сделали ремикс: чтобы не писать тонны пользовательского кода, мы решили использовать мультисайтовую установку.
В результате WooCommerce не нужно управлять разными валютами. На долларовом сайте WooCommerce все делает в долларах. На сайте евро WooCommerce все делает в евро. Это также упрощает добавление новой валюты. Мы бы просто добавили новый сайт и скопировали настройки. В сочетании с MultilingualPress в будущем это также позволит нам поддерживать различные языки.
WooCommerce отлично подошла для yoast.com по нескольким причинам:
- Хорошая модель данных.
- Большая экосистема.
- Встроенный REST API и поддержка Webhook.
- Возможность тестирования нашего плагина в сочетании с WooCommerce.
- WooCommerce решает домен электронной коммерции. Мы не хотели тратить много времени на работу с доменом электронной коммерции. SEO — это наш опыт, поэтому мы хотим сосредоточиться на SEO.
- WooCommerce имеет активное сообщество, в котором мы можем участвовать.
электронная коммерция: SKU, исторические записи и возвраты
Я хочу сосредоточиться на домене электронной коммерции. Одним из аспектов, который следует учитывать, является SKU. У каждого товара есть SKU — уникальный идентификатор. Артикул может показаться чем-то излишним. Зачем мне SKU, если у меня есть ID в базе? Но потом вы понимаете, что в каждом финансовом отделе каждой компании уже есть эта система. SKU не увеличиваются автоматически — вам нужен способ однозначного отслеживания продуктов. Имена для этого не подходят. Таким образом, на yoast.com SKU теперь является тем же номером, который наш финансовый отдел использует для отслеживания продуктов.
Другим требованием было наличие истории каждой покупки. WooCommerce делает это по умолчанию. Как только заказ выполнен, все. Все данные неизменны. Если клиент меняет свое имя, адрес или адрес электронной почты, новая информация используется только для новых заказов. Для разработчика это может показаться странным, но на самом деле это сильная сторона. Вы также не хотели бы, чтобы ваш банк изменил транзакции постфактум — как только они будут выполнены, они будут завершены. Любая мутация — это новая транзакция.
Наличие исторической записи имеет большое значение, когда дело доходит до возмещения. В прежних настройках возвращенные заказы исчезали из нашего экспорта, что изменяло доход в этом месяце. В WooCommerce каждый возврат имеет свою дату и сумму. Так что раз в месяц сделано, это действительно сделано.
В WooCommerce каждый возврат имеет свою дату и сумму. Так что раз в месяц сделано, это действительно сделано.
Технические подробности переноса Yoast.com на WooCommerce
Миграция
У нас много исторических данных, а это значит, что нам пришлось перенести большое количество заказов. Мы выбрали инструмент под названием pandas, инструмент, предназначенный для обработки больших наборов данных, и хороший выбор для одновременной миграции. Если бы мы планировали еще одну миграцию, мы, вероятно, пошли бы в другом направлении — мы бы медленно форматировали исторические данные в течение нескольких месяцев. Это значительно сократит объем данных, подлежащих переносу в день фактического перемещения.
Была одна главная проблема, которая делала процесс более сложным, чем он должен был быть. Поскольку все данные были сохранены в одном метазначении в базе данных, их необходимо было десериализовать. В Python нет эффективного и правильного способа десериализации PHP, поэтому мы в конечном итоге обратились к PHP, чтобы иметь возможность десериализовать эти данные.
Агрегирование данных
Вы могли заметить, что теперь у нас два сайта. Но мы по-прежнему хотим иметь обзор всех данных в одном месте. Это одна из причин, по которой мы создаем MyYoast. Все заказы, которые мы получаем, синхронизируются с MyYoast. Это означает, что MyYoast знает все.
В WooCommerce есть система для синхронизации всех заказов: вебхуки. Как правило, самым большим недостатком веб-перехватчиков является то, что если принимающая система не работает, веб-перехватчик не принимается. При просмотре кода вебхуков вы найдете следующий фрагмент:
«`
/*
* Разрешить другим плагинам перехватывать доставку для некоторых очередей сообщений, таких как rabbit/zeromq
*/
return apply_filters('woocommerce_webhook_should_deliver', $should_deliver, $this, $arg);
«`
Мы рассматривали возможность использования очереди сообщений, как было предложено в комментарии, но выбрали более простой подход.
Существует проект delayed_job от сообщества Ruby on Rails. Мы нашли порт PHP, который соответствовал нашим потребностям. Отложенное задание делает то, что следует из его названия: оно планирует выполнение задания на более позднее время. Это означает, что работа никогда не может быть потеряна. И если задание не удается, оно будет повторено еще четыре раза. После этого задание можно использовать для отладки того, что пошло не так. Это дает нам действительно надежную установку.
Мы настроили WooCommerce, чтобы попытаться отправить веб-хуки на наш фиктивный URL-адрес: `http://my-yoast-job.url`. Это гарантирует, что мы сможем перехватывать эти запросы из кода. У нас есть один класс Scheduler, который отвечает за планирование заданий. Он перехватывает запросы вебхуков и вместо этого превращает их в задания.
У нас есть несколько классов, которые обрабатывают задания, по одному для каждого из основных строительных блоков yoast.com. Затем задания обрабатываются работником в фоновом режиме. Это быстрый процесс, поэтому покупатель сразу же увидит свою продукцию в MyYoast.
WordPress как приложение
Если вы никогда не читали приложение «Двенадцать факторов» , я настоятельно рекомендую вам это сделать. Он предлагает очень надежную основу для разработки веб-приложений. Как это переводится в контекст WordPress? Лучше, чем вы думаете.
WordPress имеет несколько уникальных функций, которые усложняют настройку. Но вы можете обойти их, чтобы получить надежную установку WordPress. Если вы делаете только один из них, это должен быть фактор зависимостей. Начните использовать Композитор! Это здесь, и это работает. Рарст сделал хороший обзор того, как использовать Composer для разработки WordPress. Автоматическое обновление не подходит для сложного веб-приложения. Так что вам нужно другое решение, и Composer отлично с этим справляется.
Представление
Мы начали без использования кеша объектов. Это оказалось плохой идеей. Если вы обрабатываете значительный объем продаж с помощью WooCommerce, вам необходимо кэширование объектов. Без этого модель заказа необходимо полностью воссоздавать при каждом запросе, касающемся этого заказа. Это очень затратно, потому что модель заказа требуется на многих страницах. Как минимум, все страницы оформления заказа должны иметь доступ к заказу.
Мы также создали несколько запросов на включение в WooCommerce, чтобы повысить производительность без кэширования. Одной из них была модификация для кэширования валют. До модификации все валюты переводились каждый раз, когда какой-либо части кода требовалась только одна валюта. Это очень неэффективно, учитывая, что каждый магазин работает только в одной валюте.
Одна вещь, которую мы не могли просто исправить внутри самой WooCommerce, — это поиск заказов и подписок. Это приведет к запросу, который может вывести из строя весь наш веб-сайт — этот запрос содержит много поисков метаданных постов, и они занимают много времени. Мы решили эту проблему, создав собственную функцию поиска поверх MyYoast.
Проблема мета-поиска также была бы решена, если бы WooCommerce использовала настраиваемые таблицы, которые, к счастью, уже включены в техническую дорожную карту WooCommerce. Эта проблема также повлияла на наши мысли о нашем собственном плагине. Можем ли мы уменьшить количество мета-ключей, которые создает Yoast SEO? В результате мы также добавили создание пользовательской таблицы в нашу собственную техническую дорожную карту.
Текущий список плагинов WordPress и расширений WooCommerce
Чтобы дать полное представление о том, где мы оказались, вот список плагинов, которые мы используем в настоящее время и которые имеют отношение к функции нашего сайта в качестве магазина. Полный список содержит 55 активных плагинов.
- CMB2: используется для добавления дополнительных настраиваемых полей к типам сообщений.
- Тип поля CMB2: используется для прикрепления нескольких сообщений в качестве мета-значения.
- Поле поиска сообщения CMB2: используется для поиска отдельного сообщения, чтобы прикрепить его в качестве мета-значения.
- Google Authenticator: добавление 2FA к нашему логину.
- Google Authenticator, подсказка для каждого пользователя: таким образом, все сотрудники Yoast могут использовать 2FA, но клиентам это не обязательно.
- MailChimp для WordPress и MailChimp для WordPress — Premium: используется для подключения заказов к MailChimp.
- Члены: для управления разрешениями для различных ролей, таких как инженеры службы поддержки.
- MultilingualPress: используется для управления различными сайтами в мультисайте.
- MyYoast Custom Login: стилизует экран входа в систему.
- Отчеты New Relic для WordPress: мы используем NewRelic для отслеживания нашей производительности.
- Почтовый штемпель: для надежной отправки электронных писем.
- Цветовая схема Romance Admin: каждому нужно немного розового в жизни!
- WooCommerce: как вы могли догадаться, для обработки заказов на yoast.com!
- Yoast SEO: WooCommerce: Добавление совместимости между WooCommerce и Yoast SEO.
- Yoast SEO Premium: используется для перенаправлений, предложений внутренних ссылок и нескольких ключевых слов.
Текущий список плагинов WordPress и расширений WooCommerce
- WooCommerce — платежи по странам: используется для демонстрации различных способов оплаты клиентам из разных стран.
- WooCommerce AdyenCw: используется для добавления платежных шлюзов Adyen в WooCommerce.
- Ссылки на купоны WooCommerce: используются для создания ссылок, которые автоматически применяют определенный купон.
- Динамическое ценообразование WooCommerce : используется для предоставления скидок на оптовые покупки.
- Настройщик электронной почты WooCommerce: используется для оформления электронных писем, отправляемых WooCommerce.
- Номер НДС ЕС WooCommerce: используется для сбора номера НДС европейских клиентов и проверки номера с помощью службы VIES.
- WooCommerce Give Products: Используется для раздачи товаров.
- WooCommerce PayPal Express Checkout Gateway: используется для добавления платежного шлюза PayPal в WooCommerce с поддержкой подписок WooCommerce.
- Наборы продуктов WooCommerce: используются для создания пакетов в нашем магазине.
- Подписки WooCommerce: используются для отслеживания оставшегося времени поддержки и обновлений плагинов.
Выводы и результаты
Мы запустили эту новую платформу 29 августа 2017 года. В последующие недели мы значительно улучшили производительность сайта. Мы достигли всех целей, к которым стремились. После миграции мы также начали создавать много других вещей. Нашей службе поддержки теперь намного проще возвращать деньги и передавать аккаунты. Мы перевели нашу академию Yoast на мультисайт. И у нас есть множество интересных планов на 2018 год, в том числе:
- Добавление магазина, где мы продаем в британских фунтах. Благодаря нашему прошлому выбору и нашему переходу на WooCommerce, мы можем сделать это за день, это почти не потребует дополнительного кода. Добавление панели управления продажами для нашей команды продаж.
- Добавление панели управления продажами для нашей команды продаж.
- Добавление поддержки Composer в наши премиальные плагины.
WooCommerce предоставила Yoast техническую основу для создания и улучшения нашей платформы в следующем десятилетии. Вы планируете перенести существующий интернет-магазин на другую платформу? Вы уже сделали это? Поделитесь своим опытом в комментариях.