get_meta( self::META ) ); } public function addMetaBox(): void { add_meta_box( 'bbmmp-tracking', __( 'Canada Post tracking', 'maple-parcel' ), array( $this, 'renderMetaBox' ), wc_get_page_screen_id( 'shop-order' ), 'side', 'default' ); } /** * @param \WP_Post|\WC_Order|mixed $post_or_order The post or the order, depending on HPOS. */ public function renderMetaBox( mixed $post_or_order ): void { $order = $post_or_order instanceof \WC_Order ? $post_or_order : wc_get_order( $post_or_order instanceof \WP_Post ? $post_or_order->ID : 0 ); if ( ! $order instanceof \WC_Order ) { return; } $number = self::numberFor( $order ); wp_nonce_field( self::NONCE, 'bbmmp_tracking_nonce' ); ?>

delete_meta_data( self::META ); } else { $order->update_meta_data( self::META, $number ); } $order->save(); } public function email( mixed $order, mixed $sent_to_admin = false, mixed $plain_text = false ): void { unset( $sent_to_admin ); if ( ! $order instanceof \WC_Order ) { return; } $number = self::numberFor( $order ); if ( '' === $number ) { return; } if ( $plain_text ) { /* translators: 1: tracking number, 2: tracking page address. */ echo esc_html( sprintf( __( 'Canada Post tracking number: %1$s (%2$s)', 'maple-parcel' ), $number, self::url( $number ) ) ) . "\n\n"; return; } echo $this->linkHtml( $number ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- built from escaped parts in linkHtml(). } public function myAccount( mixed $order ): void { if ( ! $order instanceof \WC_Order ) { return; } $number = self::numberFor( $order ); if ( '' !== $number ) { echo $this->linkHtml( $number ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- built from escaped parts in linkHtml(). } } private function linkHtml( string $number ): string { return sprintf( '

%1$s

%2$s %4$s

', esc_html__( 'Tracking', 'maple-parcel' ), esc_html__( 'Canada Post tracking number:', 'maple-parcel' ), esc_url( self::url( $number ) ), esc_html( $number ) ); } }