I like to get all available checkout fields, including third party ones:
$fields = WC()->checkout()->checkout_fields;
returns a fatal error:
Fatal error: Call to a member function get_country() on a non-object in
../wp-content/plugins/woocommerce/includes/class-wc-checkout.php</b> on line 768
Is there an offical way to get them?
Edit:
My plugin needs a dropdown field with all available checkout fields on the backend. What I like to have is an array like this (I var_dump
the $checkout_fields
variable of the WC_Checkout
class) :
Array
(
[billing] => Array
(
[billing_country] => Array
(
[type] => country
[label] => Country
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
[2] => update_totals_on_change
)
)
[billing_first_name] => Array
(
[label] => First Name
[required] => 1
[class] => Array
(
[0] => form-row-first
)
)
[billing_last_name] => Array
(
[label] => Last Name
[required] => 1
[class] => Array
(
[0] => form-row-last
)
[clear] => 1
)
[billing_company] => Array
(
[label] => Company Name
[class] => Array
(
[0] => form-row-wide
)
)
[billing_address_1] => Array
(
[label] => Address
[placeholder] => Street address
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
)
[billing_address_2] => Array
(
[placeholder] => Apartment, suite, unit etc. (optional)
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
[required] =>
)
[billing_postcode] => Array
(
[label] => Postcode / Zip
[placeholder] => Postcode / Zip
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
[clear] => 1
[validate] => Array
(
[0] => postcode
)
)
[billing_city] => Array
(
[label] => Town / City
[placeholder] => Town / City
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
)
[billing_state] => Array
(
[type] => state
[label] => State / County
[placeholder] => State / County
[required] =>
[class] => Array
(
[0] => form-row-first
[1] => address-field
)
[validate] => Array
(
[0] => state
)
)
[billing_email] => Array
(
[label] => Email Address
[required] => 1
[class] => Array
(
[0] => form-row-first
)
[validate] => Array
(
[0] => email
)
)
[billing_phone] => Array
(
[label] => Phone
[required] => 1
[class] => Array
(
[0] => form-row-last
)
[clear] => 1
[validate] => Array
(
[0] => phone
)
)
)
[shipping] => Array
(
[shipping_country] => Array
(
[type] => country
[label] => Country
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
[2] => update_totals_on_change
)
)
[shipping_first_name] => Array
(
[label] => First Name
[required] => 1
[class] => Array
(
[0] => form-row-first
)
)
[shipping_last_name] => Array
(
[label] => Last Name
[required] => 1
[class] => Array
(
[0] => form-row-last
)
[clear] => 1
)
[shipping_company] => Array
(
[label] => Company Name
[class] => Array
(
[0] => form-row-wide
)
)
[shipping_address_1] => Array
(
[label] => Address
[placeholder] => Street address
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
)
[shipping_address_2] => Array
(
[placeholder] => Apartment, suite, unit etc. (optional)
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
[required] =>
)
[shipping_postcode] => Array
(
[label] => Postcode / Zip
[placeholder] => Postcode / Zip
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
[clear] => 1
[validate] => Array
(
[0] => postcode
)
)
[shipping_city] => Array
(
[label] => Town / City
[placeholder] => Town / City
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
)
[shipping_state] => Array
(
[type] => state
[label] => State / County
[placeholder] => State / County
[required] =>
[class] => Array
(
[0] => form-row-first
[1] => address-field
)
[validate] => Array
(
[0] => state
)
)
)
[account] => Array
(
[account_password] => Array
(
[type] => password
[label] => Account password
[required] => 1
[placeholder] => Password
)
)
[order] => Array
(
[order_comments] => Array
(
[type] => textarea
[class] => Array
(
[0] => notes
)
[label] => Order Notes
[placeholder] => Notes about your order, e.g. special notes for delivery.
)
)
)
i was facing the same issue . here's how i managed it .
Now you can get billing and shipping fields respectively in this class.
regards
I know I'm late to the party, but I was looking for an exact feature and accepted answer was not satysfying for me, so I digged into this.
As question owner said, he needs to get all available checkout fields on admin area (in his plugin).
He cant do this stright away because there is no checkout available at that point (and no customer or even WooCommerce session).
So the solution is to fake session and customer so checkout will be available in the admin area (with default user data).