studiou-wc-product-cat-manage.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. <?php
  2. /**
  3. * Plugin Name: QDR - Studiou WC Export/Import Product Categories
  4. * Plugin URI: https://www.quadarax.com/plugins/studiou-wc-product-cat-manage
  5. * Description: Allows batch import and export WooCommerce product categories
  6. * Version: 1.0
  7. * Requires at least: 6.7.2
  8. * Requires PHP: 8.2
  9. * Author: Dalibor Votruba
  10. * Author URI: https://www.quadarax.com
  11. * License: GPL v2 or later
  12. * License URI: https://www.gnu.org/licenses/gpl-2.0.html
  13. * Text Domain: studiou-wc-product-cat-manage
  14. * Domain Path: /languages
  15. */
  16. // If this file is called directly, abort.
  17. if (!defined('WPINC')) {
  18. die;
  19. }
  20. // Define plugin constants
  21. define('STUDIOU_WCPCM_VERSION', '1.0');
  22. define('STUDIOU_WCPCM_PLUGIN_DIR', plugin_dir_path(__FILE__));
  23. define('STUDIOU_WCPCM_PLUGIN_URL', plugin_dir_url(__FILE__));
  24. define('STUDIOU_WCPCM_PLUGIN_BASENAME', plugin_basename(__FILE__));
  25. /**
  26. * Main plugin class
  27. */
  28. class Studiou_WC_Product_Cat_Manage {
  29. /**
  30. * @var Studiou_WC_Product_Cat_Manage_Export
  31. */
  32. private $exporter;
  33. /**
  34. * @var Studiou_WC_Product_Cat_Manage_Import
  35. */
  36. private $importer;
  37. /**
  38. * @var Studiou_WC_Product_Cat_Manage_DB
  39. */
  40. private $db;
  41. /**
  42. * Initialize the plugin
  43. */
  44. public function __construct() {
  45. // Load dependencies
  46. $this->load_dependencies();
  47. // Check required plugins
  48. add_action('admin_init', array($this, 'check_required_plugins'));
  49. // Add admin menu items
  50. add_action('admin_menu', array($this, 'add_admin_menu'), 99);
  51. // Register admin assets
  52. add_action('admin_enqueue_scripts', array($this, 'register_admin_assets'));
  53. // Initialize components
  54. $this->init_components();
  55. }
  56. /**
  57. * Load required dependencies
  58. */
  59. private function load_dependencies() {
  60. require_once STUDIOU_WCPCM_PLUGIN_DIR . 'includes/class-studiou-wc-product-cat-manage-db.php';
  61. require_once STUDIOU_WCPCM_PLUGIN_DIR . 'includes/class-studiou-wc-product-cat-manage-export.php';
  62. require_once STUDIOU_WCPCM_PLUGIN_DIR . 'includes/class-studiou-wc-product-cat-manage-import.php';
  63. }
  64. /**
  65. * Initialize components
  66. */
  67. private function init_components() {
  68. $this->db = new Studiou_WC_Product_Cat_Manage_DB();
  69. $this->exporter = new Studiou_WC_Product_Cat_Manage_Export($this->db);
  70. $this->importer = new Studiou_WC_Product_Cat_Manage_Import($this->db);
  71. }
  72. /**
  73. * Check if required plugins are active
  74. */
  75. public function check_required_plugins() {
  76. if (!is_admin() || isset($_GET['activate-multi'])) {
  77. return;
  78. }
  79. // Check for WooCommerce
  80. if (!class_exists('WooCommerce') || !defined('WC_VERSION') || version_compare(WC_VERSION, '9.7', '<')) {
  81. add_action('admin_notices', array($this, 'woocommerce_missing_notice'));
  82. deactivate_plugins(STUDIOU_WCPCM_PLUGIN_BASENAME);
  83. if (isset($_GET['activate'])) {
  84. unset($_GET['activate']);
  85. }
  86. return;
  87. }
  88. // Check for WooCommerce Protected Categories
  89. if (!class_exists('WC_Protected_Categories') || !defined('WC_PROTECTED_CATEGORIES_VERSION') ||
  90. version_compare(WC_PROTECTED_CATEGORIES_VERSION, '2.7', '<')) {
  91. add_action('admin_notices', array($this, 'protected_categories_missing_notice'));
  92. deactivate_plugins(STUDIOU_WCPCM_PLUGIN_BASENAME);
  93. if (isset($_GET['activate'])) {
  94. unset($_GET['activate']);
  95. }
  96. }
  97. }
  98. /**
  99. * WooCommerce missing notice
  100. */
  101. public function woocommerce_missing_notice() {
  102. ?>
  103. <div class="error">
  104. <p><?php echo sprintf(
  105. __('QDR - Studiou WC Export/Import Product Categories requires WooCommerce version 9.7 or higher. Please %sinstall or update WooCommerce%s.', 'studiou-wc-product-cat-manage'),
  106. '<a href="' . admin_url('plugin-install.php?s=woocommerce&tab=search&type=term') . '">',
  107. '</a>'
  108. ); ?></p>
  109. </div>
  110. <?php
  111. }
  112. /**
  113. * WooCommerce Protected Categories missing notice
  114. */
  115. public function protected_categories_missing_notice() {
  116. ?>
  117. <div class="error">
  118. <p><?php echo sprintf(
  119. __('QDR - Studiou WC Export/Import Product Categories requires WooCommerce Protected Categories version 2.7 or higher. Please %sinstall or update WooCommerce Protected Categories%s.', 'studiou-wc-product-cat-manage'),
  120. '<a href="https://barn2.com/wordpress-plugins/woocommerce-protected-categories/" target="_blank">',
  121. '</a>'
  122. ); ?></p>
  123. </div>
  124. <?php
  125. }
  126. /**
  127. * Add admin menu items
  128. */
  129. public function add_admin_menu() {
  130. // Make sure WooCommerce menu exists
  131. if (class_exists('WooCommerce')) {
  132. add_submenu_page(
  133. 'edit.php?post_type=product',
  134. __('Import Product Categories', 'studiou-wc-product-cat-manage'),
  135. __('Import Product Categories', 'studiou-wc-product-cat-manage'),
  136. 'manage_woocommerce',
  137. 'studiou-import-product-categories',
  138. array($this, 'render_import_page')
  139. );
  140. add_submenu_page(
  141. 'edit.php?post_type=product',
  142. __('Export Product Categories', 'studiou-wc-product-cat-manage'),
  143. __('Export Product Categories', 'studiou-wc-product-cat-manage'),
  144. 'manage_woocommerce',
  145. 'studiou-export-product-categories',
  146. array($this, 'render_export_page')
  147. );
  148. }
  149. }
  150. /**
  151. * Register admin assets
  152. */
  153. public function register_admin_assets($hook) {
  154. if ('product_page_studiou-import-product-categories' === $hook ||
  155. 'product_page_studiou-export-product-categories' === $hook) {
  156. wp_enqueue_style(
  157. 'studiou-wcpcm-admin',
  158. STUDIOU_WCPCM_PLUGIN_URL . 'assets/css/admin.css',
  159. array(),
  160. STUDIOU_WCPCM_VERSION
  161. );
  162. wp_enqueue_script(
  163. 'studiou-wcpcm-admin',
  164. STUDIOU_WCPCM_PLUGIN_URL . 'assets/js/admin.js',
  165. array('jquery'),
  166. STUDIOU_WCPCM_VERSION,
  167. true
  168. );
  169. wp_localize_script('studiou-wcpcm-admin', 'studiouWcpcm', array(
  170. 'ajaxUrl' => admin_url('admin-ajax.php'),
  171. 'nonce' => wp_create_nonce('studiou-wcpcm-nonce'),
  172. 'i18n' => array(
  173. 'importSuccess' => __('Import successful', 'studiou-wc-product-cat-manage'),
  174. 'importError' => __('Import error', 'studiou-wc-product-cat-manage'),
  175. 'exportSuccess' => __('Export successful', 'studiou-wc-product-cat-manage'),
  176. 'exportError' => __('Export error', 'studiou-wc-product-cat-manage'),
  177. )
  178. ));
  179. }
  180. }
  181. /**
  182. * Render import page
  183. */
  184. public function render_import_page() {
  185. include STUDIOU_WCPCM_PLUGIN_DIR . 'views/import.php';
  186. }
  187. /**
  188. * Render export page
  189. */
  190. public function render_export_page() {
  191. include STUDIOU_WCPCM_PLUGIN_DIR . 'views/export.php';
  192. }
  193. }
  194. /**
  195. * Begin execution of the plugin
  196. */
  197. function run_studiou_wc_product_cat_manage() {
  198. // Create instance
  199. new Studiou_WC_Product_Cat_Manage();
  200. }
  201. // Run the plugin
  202. run_studiou_wc_product_cat_manage();