id = 'aisp_admin_shipping'; $this->instance_id = absint( $instance_id ); $this->method_title = __( 'Admin Shipping (Order Tools)', 'aisp-order-tools-for-woocommerce' ); $this->method_description = __( 'Admin-only shipping method using zone-defined pricing.', 'aisp-order-tools-for-woocommerce' ); $this->supports = array( 'shipping-zones', 'instance-settings', ); $this->init(); } public function init() { $this->init_form_fields(); $this->init_settings(); $this->enabled = $this->get_option( 'method_enabled', 'yes' ); $this->title = $this->get_option( 'title', __( 'Admin Shipping', 'aisp-order-tools-for-woocommerce' ) ); $this->tax_status = $this->get_option( 'tax_status', 'taxable' ); add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) ); } public function init_form_fields() { $this->instance_form_fields = array( 'method_enabled' => array( 'title' => __( 'Enable/Disable', 'aisp-order-tools-for-woocommerce' ), 'type' => 'checkbox', 'label' => __( 'Enable this shipping method', 'aisp-order-tools-for-woocommerce' ), 'default' => 'yes', ), 'title' => array( 'title' => __( 'Method title', 'aisp-order-tools-for-woocommerce' ), 'type' => 'text', 'default' => __( 'Admin Shipping', 'aisp-order-tools-for-woocommerce' ), 'description' => __( 'Label shown to administrators at checkout.', 'aisp-order-tools-for-woocommerce' ), ), 'cost' => array( 'title' => __( 'Default cost', 'aisp-order-tools-for-woocommerce' ), 'type' => 'number', 'default' => '0', 'description' => __( 'Shipping price for this zone.', 'aisp-order-tools-for-woocommerce' ), 'desc_tip' => true, 'custom_attributes' => array( 'step' => '0.01', 'min' => '0', ), ), 'tax_status' => array( 'title' => __( 'Tax status', 'aisp-order-tools-for-woocommerce' ), 'type' => 'select', 'default' => 'taxable', 'options' => array( 'taxable' => __( 'Taxable', 'aisp-order-tools-for-woocommerce' ), 'none' => __( 'None', 'aisp-order-tools-for-woocommerce' ), ), ), ); } public function process_admin_options() { parent::process_admin_options(); } public function calculate_shipping( $package = array() ) { if ( ! current_user_can( 'manage_woocommerce' ) ) { return; } $cost = floatval( $this->get_option( 'cost', 0 ) ); $rate = array( 'id' => $this->get_rate_id(), 'label' => $this->title, 'cost' => $cost, ); if ( 'none' === $this->tax_status ) { $rate['taxes'] = array(); } $this->add_rate( $rate ); } } } add_filter( 'woocommerce_shipping_methods', __NAMESPACE__ . '\aisp_otools_register_admin_shipping_method' ); function aisp_otools_register_admin_shipping_method( $methods ) { $methods['aisp_admin_shipping'] = 'AISP_OTOOLS\Admin_Shipping_Method'; return $methods; } add_filter( 'woocommerce_package_rates', __NAMESPACE__ . '\aisp_otools_hide_admin_shipping_from_customers', 20 ); function aisp_otools_hide_admin_shipping_from_customers( $rates ) { if ( current_user_can( 'manage_woocommerce' ) ) { return $rates; } foreach ( $rates as $key => $rate ) { if ( isset( $rate->method_id ) && 'aisp_admin_shipping' === $rate->method_id ) { unset( $rates[ $key ] ); } } return $rates; }