Woocomerce 3.0. Что нового и как с этим бороться?
Обновился Woocomerce и теперь на момент записи видео и написания этой статьи актуальная версия 3.0.1. Давайте разбираться, что в нем нового.
Новые галереи
Полностью обновилась галерея, теперь она отлично работает на мобильных устройствах и несет на борту сразу три функционала: зум, слайдер, лайтбокс. Данную галреею требуется подключать в поддержку темы, просто так работать не будет. Достаточно добавить в файл functions.php
add_theme_support( 'wc-product-gallery-zoom' );
add_theme_support( 'wc-product-gallery-lightbox' );
add_theme_support( 'wc-product-gallery-slider' );
Добавлять просто так нельзя! Надо вешать на хук after_setup_theme.
Правильно будет так
add_action( 'after_setup_theme', 'artabr_theme_setup' );
function artabr_theme_setup() {
add_theme_support( 'wc-product-gallery-zoom' );
add_theme_support( 'wc-product-gallery-lightbox' );
add_theme_support( 'wc-product-gallery-slider' );
}
Можно подключать не всё сразу, а только нужное. Например, только слайдер или только лайтбокс. Смотря какой проект
к содержаниюЗаголовки в H2
После обновления на страницах: магазин, архивы, рубрики, похожие записи в заголовках товаров изменились заголовки с H3 на H2. Может поплыть верстка. Если для вас это критично, то достаточно в файл functions.php
добавить измененную функцию, чтобы переопределить то, что есть
function woocommerce_template_loop_product_title() {
echo '<h3 class="woocommerce-loop-product__title">' . get_the_title() . '</h3>';
}
к содержанию
Предупреждение: функция product_type вызвана неправильно
Теперь нельзя напрямую вызывать тип продукта, только через метод get_type().
Проверяйте свой код и меняйте. $product->product_type
на $product->get_type()
Предупреждение: функция id вызвана неправильно
Теперь нельзя напрямую вызывать ID продукта, только через метод get_ID().
Проверяйте свой код и меняйте. $product->id
на $product->get_ID()
Введение CRUD
Вольный перевод этой статьи и этой с моими примечаниями)
До этого релиза (имеется ввиду Woocommerce 3.0), было несколько способов для разработчиков записывать данные в базу данных для заказов, продуктов и так далее. Получение данных также может быть сделано несколькими способами. Все это требует от разработчика знать, какой тип данных , они пытаются изменить, и это было не идеально: отнимало много времени и было сложным процессом.
Для оптимизации хранения данных, мы (разработчики Woocommerce) должны убедиться , что разработчики используют единый метод написания и извлечение данных . Вот почему вводится класс CRUD с этом релизе.
CRUD (СПОУ) обозначает Create, Read, Update, Delete (Создать, Прочитать, Обновить, Удалить)- четыре основные операции , которые можно сделать. С классами CRUD добавлеными в WooCommerce 3,0, вы можете изменять заказы, товары, клиенты, зоны достави, платежные системы и купоныс меньшим количеством кода через единую систему .
Преимущества этого дополнения:
- Определяем данные для каждого ресурса и контролируем его поток и проверку
- Вам нужно только знать имена данных с которыми вы работает, а не из типов или внутренних деталей
- Эти данные могут быть перемещены в другом месте (например , пользовательские таблицы) , не затрагивая существующий код
- Меньше кода означает меньше изменений, плюс дополнительные тесты
Примеры использования CRUD
Давайте возьмем существующий пример. Я хочу, чтобы обновить адрес заказа. С текущей кодовой базы я в конечном итоге делает что-то вроде следующего:
$order_id = 100; update_post_meta( $order_id, '_billing_first_name', 'Fred' ); update_post_meta( $order_id, '_billing_last_name', 'Flintstone' );
Мне нужно знать идентификатор товара, мета-ключи для каждого поля, и мне нужно самому обрабатывать все проверки.
Теперь пример CRUD:
$order = wc_get_order( 100 ); $order->set_billing_first_name( 'Fred ); $order->set_billing_last_name( 'Flintstone' ); $order->save();
Я знаю, что у заказа есть свойство первого и последнего имени, но мне не нужно знать, что это пост-мета, или что ключи — это _billing_first_name
и _billing_last_name
. Если эти ключи изменились в будущем, этот код не будет затронут.
Получение данных из базы данных следует аналогичной схеме. Старый:
$order_id = 100; $billing_name = get_post_meta( $order_id, '_billing_first_name', true ) . ' ' . get_post_meta( $order_id, '_billing_last_name', true );
Новое:
$order = wc_get_order( 100 ); $billing_name = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name();
Когда это возможно, классы CRUD должны обрабатывать в основном чтение и запись данных. Любой связанный шаблон, такой как получение HTML, должен быть перемещен в функцию шаблона.
к содержаниюПримеры запросов к ресурсам
Поскольку в дальнейшем мы намерены переместить данные в пользовательскую таблицу, важно, чтобы мы предложили способ запроса данных, не проходя сам WordPress. Опять же, разработчику не нужно знать, что заказы — это пользовательский тип записи с именем shop_order
— это не имеет значения.
Было
$customer_orders = get_posts( array( 'numberposts' => 10, 'meta_key' => '_customer_user', 'meta_value' => get_current_user_id(), 'post_type' => wc_get_order_types( 'view-orders' ), 'post_status' => array_keys( wc_get_order_statuses() ) ) );</code>
Стало
$customer_orders = wc_get_orders( array( 'customer' => get_current_user_id(), 'limit' => 10, ) );
Вот, это то что нашел и смог исправить. Пишите в коментах, что увидели и с чем столкнулись. Будем разбираться.
Всем успехов!