При создании сети (multisite) сайтов возникла проблема с медиабиблиотекой. Проблема состояла в том что главный сайт уже долгое время функционирует, на нем более 500 товаров с несколькими изображениями в каждом. И если пользоваться решением по копированию товаров (контента) с главного сайта на дочерние, при этом создаются и копии всех изображений. Для копирования товаров использовался платный плагин WooCommerce Multisite Product Sync.
Объединение медиабиблиотеки
Создать одну общую библиотеку для всей сети сайтов можно плагином Network Media Library. Его нет в репозитории Woocommerce, но плагин 100% рабочий. Из «настроек» (в самом коде) нужно прописать какой сайт будет считаться главным, с того сайта можно будет удалять и загружать изображения, на остальных сайтах только пользоваться. По умолчанию прописан сайт с ID=2, но главный первый сайт имеет ID=1.
Изменяем WooCommerce Multisite Product Sync (WCMPS)
При создании сети из готового сайта у данного плагина есть инструмент по массовому копированию товаров в дочерние сайты. При этом в частности и происходит копирование медифайлов, в независимости подключили мы плагин Network Media Library или нет (он только создает возможность использовать совместную галерею).
Для категорий и товаров в дочерние сайты можно передавать в виде миниатюры тот же ID что и донорского товара или категории, т.к. он будет доступен для любого сайта сати. Для этого нужно изменить плагин WCMPS, конкретно файл /includes/class-wcmps.php.
Корректировка обновления изображений товаров: строка 472, удаляем условие if ( $copy_media ) и вместо него прописываем
update_post_meta( $destination_item_id, '_thumbnail_id', $thumbnail_id );
Корректировка обновления изображений категорий: строка 672, внутри условия if ( $thumbnail_data != null ) { удаляем все и прописываем:
update_term_meta( $destination_item_id, 'thumbnail_id', $thumbnail_id );
Передача дополнительных фото. Нужно добавить в условие foreach ( $postmeta_fields as $field_key => $field_value ) { (примерно строка 351) следующее:
if ( $_product_image_gallery != null ) {
// добавление дополнительных изображений
update_post_meta( $destination_item_id, '_product_image_gallery', $_product_image_gallery );
}
И самое главное, если не нужно копировать изображения по сети — нужно убрать везде код в котором фигурирует функция upload.
[site-socialshare]