Home / eCommerce / WWPAY – Add Purchase Order Number field to Wholesale Payments at classic checkout
Duplicate Snippet

Embed Snippet on Your Site

WWPAY – Add Purchase Order Number field to Wholesale Payments at classic checkout

One caveat: this only support WooCommerce Classic Checkout.

Code Preview
php
<?php
/**
   * Add Purchase Order Number field to Wholesale Payments at classic checkout.
   */
  // 1. Render the field — visible only when Wholesale Payments is selected.
  add_action( 'woocommerce_review_order_before_submit', function () {
      ?>
      <div id="wpay-po-number-field" style="display:none; margin-bottom: 1rem;">
          <p>
              <label for="wpay_purchase_order_number">
                  <?php esc_html_e( 'Purchase Order Number (optional)', 'woocommerce-wholesale-payments' ); ?>
              </label><br>
              <input
                  type="text"
                  id="wpay_purchase_order_number"
                  name="wpay_purchase_order_number"
                  class="input-text"
                  style="width: 100%;"
                  placeholder="<?php esc_attr_e( 'PO Number', 'woocommerce-wholesale-payments' ); ?>"
              />
          </p>
      </div>
      <script>
      (function ($) {
          function togglePoField() {
              if ( $('input[name="payment_method"]:checked').val() === 'wc_wholesale_payments' ) {
                  $('#wpay-po-number-field').show();
              } else {
                  $('#wpay-po-number-field').hide();
              }
          }
          $( document ).on( 'change', 'input[name="payment_method"]', togglePoField );
          $( document.body ).on( 'updated_checkout', togglePoField );
          togglePoField();
      })(jQuery);
      </script>
      <?php
  }, 20 );
  // 2. Save PO number to order meta (HPOS-compatible).
  add_action( 'woocommerce_checkout_update_order_meta', function ( $order_id ) {
      if ( ! empty( $_POST['wpay_purchase_order_number'] ) ) {
          $order = wc_get_order( $order_id );
          if ( $order ) {
              $order->update_meta_data( '_wpay_purchase_order_number', sanitize_text_field( wp_unslash(
  $_POST['wpay_purchase_order_number'] ) ) );
              $order->save();
          }
      }
  } );
  // 3. Show in order admin (below billing address).
  add_action( 'woocommerce_admin_order_data_after_billing_address', function ( $order ) {
      $po = $order->get_meta( '_wpay_purchase_order_number', true );
      if ( $po ) {
          echo '<p><strong>' . esc_html__( 'Purchase Order Number:', 'woocommerce-wholesale-payments' ) . '</strong> ' .
  esc_html( $po ) . '</p>';
      }
  } );
  // 4. Include in order confirmation emails.
  add_action( 'woocommerce_email_after_order_table', function ( $order ) {
      $po = $order->get_meta( '_wpay_purchase_order_number', true );
      if ( $po && $order->get_payment_method() === 'wc_wholesale_payments' ) {
          echo '<p><strong>' . esc_html__( 'Purchase Order Number:', 'woocommerce-wholesale-payments' ) . '</strong> ' .
  esc_html( $po ) . '</p>';
      }
  }, 10, 2 );

Comments

Add a Comment