WooCommerce checkout field order is a filter, not a template edit

Reordering the checkout form by copying form-billing.php into the theme works and then quietly rots: every WooCommerce release that touches that template leaves your copy behind, and the shop loses whatever was added upstream.

add_filter( 'woocommerce_checkout_fields', function ( $fields ) {
    $fields['billing']['billing_phone']['priority'] = 25;
    $fields['billing']['billing_company']['required'] = true;
    unset( $fields['billing']['billing_address_2'] );

    return $fields;
} );

Fields are sorted by priority, in tens, so inserting between two existing fields needs no renumbering. Doing it through the filter also means the change applies to the account and address forms that reuse the same definitions. Keep template overrides for markup that genuinely differs, and check WooCommerce → Status after every update — it lists overrides that have fallen out of date.