load_dependencies();
// Check required plugins
add_action('admin_init', array($this, 'check_required_plugins'));
// Add admin menu items
add_action('admin_menu', array($this, 'add_admin_menu'), 99);
// Register admin assets
add_action('admin_enqueue_scripts', array($this, 'register_admin_assets'));
// Initialize components
$this->init_components();
// Declare WooCommerce HPOS compatibility
add_action('before_woocommerce_init', array($this, 'declare_hpos_compatibility'));
}
/**
* Declare compatibility with WooCommerce HPOS (High-Performance Order Storage)
*/
public function declare_hpos_compatibility() {
if (class_exists('Automattic\WooCommerce\Utilities\FeaturesUtil')) {
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility(
'custom_order_tables',
__FILE__,
true
);
}
}
/**
* Load required dependencies
*/
private function load_dependencies() {
require_once STUDIOU_WCPCM_PLUGIN_DIR . 'includes/class-studiou-wc-product-cat-manage-db.php';
require_once STUDIOU_WCPCM_PLUGIN_DIR . 'includes/class-studiou-wc-product-cat-manage-export.php';
require_once STUDIOU_WCPCM_PLUGIN_DIR . 'includes/class-studiou-wc-product-cat-manage-import.php';
require_once STUDIOU_WCPCM_PLUGIN_DIR . 'includes/class-studiou-wc-product-cat-manage-manipulator.php';
}
/**
* Initialize components
*/
private function init_components() {
$this->db = new Studiou_WC_Product_Cat_Manage_DB();
$this->exporter = new Studiou_WC_Product_Cat_Manage_Export($this->db);
$this->importer = new Studiou_WC_Product_Cat_Manage_Import($this->db);
$this->manipulator = new Studiou_WC_Product_Cat_Manage_Manipulator($this->db);
}
/**
* Check if required plugins are active
*/
public function check_required_plugins() {
if (!is_admin() || isset($_GET['activate-multi'])) {
return;
}
// Check for WooCommerce
if (!class_exists('WooCommerce') || !defined('WC_VERSION') || version_compare(WC_VERSION, '9.8', '<')) {
add_action('admin_notices', array($this, 'woocommerce_missing_notice'));
deactivate_plugins(STUDIOU_WCPCM_PLUGIN_BASENAME);
if (isset($_GET['activate'])) {
unset($_GET['activate']);
}
}
}
/**
* WooCommerce missing notice
*/
public function woocommerce_missing_notice() {
?>
admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('studiou-wcpcm-nonce'),
'i18n' => array(
'importSuccess' => __('Import successful', 'studiou-wc-product-cat-manage'),
'importError' => __('Import error', 'studiou-wc-product-cat-manage'),
'exportSuccess' => __('Export successful', 'studiou-wc-product-cat-manage'),
'exportError' => __('Export error', 'studiou-wc-product-cat-manage'),
'moveSuccess' => __('Move operation successful', 'studiou-wc-product-cat-manage'),
'moveError' => __('Move operation error', 'studiou-wc-product-cat-manage'),
'selectDifferentCategories' => __('Please select different source and target categories', 'studiou-wc-product-cat-manage'),
'batchDescriptionSuccess' => __('Batch description operation successful', 'studiou-wc-product-cat-manage'),
'batchDescriptionError' => __('Batch description operation error', 'studiou-wc-product-cat-manage'),
'deleteSuccess' => __('Delete operation successful', 'studiou-wc-product-cat-manage'),
'deleteError' => __('Delete operation error', 'studiou-wc-product-cat-manage'),
'confirmDelete' => __('Are you sure you want to permanently delete ALL products in the selected categories? This action cannot be undone!', 'studiou-wc-product-cat-manage'),
'selectAtLeastOneCategory' => __('Please select at least one category', 'studiou-wc-product-cat-manage'),
'noProductsFound' => __('No products found in selected categories', 'studiou-wc-product-cat-manage'),
)
));
if (defined('WP_DEBUG') && WP_DEBUG) {
error_log('STUDIOU WC: Admin assets loaded successfully');
}
}
}
/**
* Render import page
*/
public function render_import_page() {
include STUDIOU_WCPCM_PLUGIN_DIR . 'views/import.php';
}
/**
* Render export page
*/
public function render_export_page() {
include STUDIOU_WCPCM_PLUGIN_DIR . 'views/export.php';
}
/**
* Render manipulations page
*/
public function render_manipulations_page() {
include STUDIOU_WCPCM_PLUGIN_DIR . 'views/manipulations.php';
}
}
/**
* Begin execution of the plugin
*/
function run_studiou_wc_product_cat_manage() {
// Only initialize once
static $initialized = false;
if ($initialized) {
return;
}
$initialized = true;
// Load text domain first
load_plugin_textdomain(
'studiou-wc-product-cat-manage',
false,
dirname(plugin_basename(__FILE__)) . '/languages/'
);
// Create instance
new Studiou_WC_Product_Cat_Manage();
}
// Run the plugin after plugins are loaded to ensure WooCommerce is available
add_action('plugins_loaded', 'run_studiou_wc_product_cat_manage');