licenseManager = $licenseManager; $this->registerHooks(); } /** * Register WordPress hooks */ private function registerHooks(): void { // Add licenses meta box to order edit page add_action('add_meta_boxes', [$this, 'addLicensesMetaBox']); // Handle AJAX actions add_action('wp_ajax_wclp_update_order_domain', [$this, 'ajaxUpdateOrderDomain']); add_action('wp_ajax_wclp_update_license_domain', [$this, 'ajaxUpdateLicenseDomain']); // Enqueue admin scripts add_action('admin_enqueue_scripts', [$this, 'enqueueScripts']); } /** * Add licenses meta box to order edit page */ public function addLicensesMetaBox(): void { // Support both classic post type and HPOS $screen = wc_get_container()->get(\Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController::class)->custom_orders_table_usage_is_enabled() ? wc_get_page_screen_id('shop-order') : 'shop_order'; add_meta_box( 'wclp_order_licenses', __('Product Licenses', 'wc-licensed-product'), [$this, 'renderLicensesMetaBox'], $screen, 'normal', 'default' ); } /** * Render licenses meta box */ public function renderLicensesMetaBox($post_or_order): void { // Get order object - support both classic and HPOS if ($post_or_order instanceof \WC_Order) { $order = $post_or_order; } else { $order = wc_get_order($post_or_order->ID); } if (!$order) { echo '
' . esc_html__('Order not found.', 'wc-licensed-product') . '
'; return; } // Check if order has licensed products $hasLicensedProduct = false; foreach ($order->get_items() as $item) { $product = $item->get_product(); if ($product && $product->is_type('licensed')) { $hasLicensedProduct = true; break; } } if (!$hasLicensedProduct) { echo '' . esc_html__('This order does not contain licensed products.', 'wc-licensed-product') . '
'; return; } // Get order domain $orderDomain = $order->get_meta('_licensed_product_domain'); // Get licenses for this order $licenses = $this->licenseManager->getLicensesByOrder($order->get_id()); wp_nonce_field('wclp_order_license_actions', 'wclp_order_license_nonce'); ?>
is_paid()): ?>
getLicenseKey()); ?>
|
get_name()); ?> |
getDomain()); ?>
|
getStatus())); ?> | getExpiresAt(); if ($expiresAt) { echo esc_html($expiresAt->format(get_option('date_format'))); } else { echo '' . esc_html__('Lifetime', 'wc-licensed-product') . ''; } ?> |
' . esc_html__('Licenses', 'wc-licensed-product') . '' ); ?>