register(); ( new Settings_Page() )->register(); ( new Product_Box() )->register(); ( new Product_Button() )->register(); ( new Product_Column() )->register(); ( new Routes() )->register(); ( new Scheduler() )->register(); } /** * Объявляет WooCommerce, с чем плагин совместим. * * Хранение заказов в своих таблицах (HPOS) и блоки корзины и оформления заказа плагин * не трогает вовсе — он работает только с товарами. Без объявления WooCommerce считает * плагин несовместимым и показывает предупреждение. * * @return void */ public static function declare_woocommerce_compatibility(): void { if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) { \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', AIMODELKA_PLUGIN_FILE, true ); \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'cart_checkout_blocks', AIMODELKA_PLUGIN_FILE, true ); } } /** * Не даёт «Дублировать товар» скопировать мету плагина. * * Иначе копия товара получила бы ту же фотосессию, то же ожидающее сохранение и тот же * статус в колонке. * * @param string[] $keys Поля меты, которые WooCommerce не копирует. * @return string[] */ public static function exclude_meta_from_duplicate( array $keys ): array { return array_merge( $keys, Meta::product_keys() ); } /** * Включён ли экспериментальный блочный редактор товара. * * Он удалён из WooCommerce в 11.0; ниже его можно включить вручную в настройках * WooCommerce → Дополнительно → Возможности. Кнопка плагина живёт только в классическом * редакторе (Documents/WPPlugin-HLD.md §2.1). * * @return bool */ public static function product_block_editor_enabled(): bool { if ( ! defined( 'WC_VERSION' ) || version_compare( WC_VERSION, '11.0', '>=' ) ) { return false; } if ( ! class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) { return false; } return \Automattic\WooCommerce\Utilities\FeaturesUtil::feature_is_enabled( 'product_block_editor' ); } }