WooCommerce에서 모든 체크아웃 필드를 가져오는 방법은?
타사 체크아웃 필드를 포함하여 사용 가능한 모든 체크아웃 필드를 얻고 싶습니다.
$fields = WC()->checkout()->checkout_fields;
치명적인 오류를 반환합니다.
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
그것들을 얻을 수 있는 공식적인 방법이 있습니까?
편집:
내 플러그인은 백엔드에 사용 가능한 모든 체크아웃 필드가 있는 드롭다운 필드가 필요합니다.제가 좋아하는 것은 이런 배열입니다.var_dump
그$checkout_fields
클래스의 변수) :
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.
)
)
)
파티에 늦었다는 것은 알지만, 정확한 특징을 찾고 있었고, 대답이 만족스럽지 않아 이에 대해 자세히 알아봤습니다.
질문 소유자가 말했듯이, 그는 (플러그인의) 관리 영역에서 사용 가능한 모든 체크아웃 필드를 가져와야 합니다.
그 시점에는 체크아웃이 가능하지 않기 때문에(고객 또는 WooCommerce 세션도 없음) 바로 실행할 수 없습니다.
따라서 솔루션은 세션과 고객을 위장하는 것이므로 관리 영역(기본 사용자 데이터로)에서 체크아웃할 수 있습니다.
/*
* WooCommerce does not load session class on backend, so we need to do this manually
*/
if ( ! class_exists( 'WC_Session' ) ) {
include_once( WP_PLUGIN_DIR . '/woocommerce/includes/abstracts/abstract-wc-session.php' );
}
/*
* admin_init hook for testing purposes
*/
add_action('admin_init', function(){
/*
* First lets start the session. You cant use here WC_Session directly
* because it's an abstract class. But you can use WC_Session_Handler which
* extends WC_Session
*/
WC()->session = new WC_Session_Handler;
/*
* Next lets create a customer so we can access checkout fields
* If you will check a constructor for WC_Customer class you will see
* that if you will not provide user to create customer it will use some
* default one. Magic.
*/
WC()->customer = new WC_Customer;
/*
* Done. You can browse all chceckout fields (including custom ones)
*/
var_dump(WC()->checkout->checkout_fields);
die();
});
저도 같은 문제에 직면해 있었습니다. 제가 어떻게 대처했는지는 이렇습니다.
class my_checkout_fields_class {
var $countries;
function __construct() {
$this->countries = new WC_Countries();
}
}
이제 이 클래스에서 청구 필드와 배송 필드를 각각 얻을 수 있습니다.
$billlingfields = $this->countries->get_address_fields( $this->countries->get_base_country(),'billing_');
$shippingfields = $this->countries->get_address_fields( $this->countries->get_base_country(),'shipping_');
안부 전해요
늦은 답변이지만 저는 무엇이 저에게 효과가 있는지 찾으려고 노력했고 이 (불완전하지만) 해결책을 결정했습니다.
함수 [WC_Countries::get_default_address_fields()
[1]은(는) 우커머스 세션이나 체크아웃에 신경 쓰지 않으므로 조건부로 필드를 숨길 때 카트에 있는 것을 무시합니다(나는 이런 경우였습니다).
부르기WC()->countries->get_default_address_fields()
플러그인에 의해 필드가 가려진 경우에도 매개 변수 없이 모든 과금 필드(사용자 지정 필드 제외)를 가져왔습니다.비록 두번째 매개변수가$type
접두사가 될 수 있습니다.'billing_'
'shipping_'
. 함수가 내 세션에서 다음을 반환했습니다(label & placeholder의 스웨덴 로케일).
Array (
[billing_first_name] => Array (
[label] => Förnamn
[required] => 1
[class] => Array (
[0] => form-row-first
)
[autocomplete] => given-name
[priority] => 10
)
[billing_last_name] => Array (
[label] => Efternamn
[required] => 1
[class] => Array (
[0] => form-row-last
)
[autocomplete] => family-name
[priority] => 20
)
[billing_country] => Array (
[type] => country
[label] => Land/Region
[required] => 1
[class] => Array (
[0] => form-row-wide
[1] => address-field
[2] => update_totals_on_change
)
[autocomplete] => country
[priority] => 40
)
[billing_address_1] => Array (
[label] => Gatuadress
[placeholder] => Gatunamn och nummer
[required] => 1
[class] => Array (
[0] => form-row-wide
[1] => address-field
)
[autocomplete] => address-line1
[priority] => 50
)
[billing_city] => Array (
[label] => Ort
[required] => 1
[class] => Array (
[0] => form-row-wide
[1] => address-field
)
[autocomplete] => address-level2
[priority] => 70
)
[billing_state] => Array (
[type] => state
[label] => Stat/län
[required] => 1
[class] => Array (
[0] => form-row-wide
[1] => address-field
)
[validate] => Array (
[0] => state
)
[autocomplete] => address-level1
[priority] => 80
[country_field] => billing_country
[country] => SE
)
[billing_postcode] => Array (
[label] => Postnummer
[required] => 1
[class] => Array (
[0] => form-row-wide
[1] => address-field
)
[validate] => Array (
[0] => postcode
)
[autocomplete] => postal-code
[priority] => 90
)
[billing_phone] => Array (
[label] => Telefon
[required] =>
)
[billing_email] => Array (
[label] => E-postadress
[required] => 1
[type] => email
[class] => Array (
[0] => form-row-wide
)
[validate] => Array (
[0] => email
)
[autocomplete] => email
[priority] => 110
)
)
언급URL : https://stackoverflow.com/questions/27130234/how-to-get-all-checkout-fields-from-woocommerce
'programing' 카테고리의 다른 글
숨김 및 표시 설정에서 작동하지 않는 ng-애니메이트 (0) | 2023.11.04 |
---|---|
'table'에서 'alias'로 삭제...여기서 'alias'.'열'...왜 구문 오류입니까? (0) | 2023.11.04 |
자바스크립트 .replace는 첫번째 Match만 바꿉니다. (0) | 2023.11.04 |
800px 이후 divon 스크롤다운 표시 (0) | 2023.11.04 |
Tensorflow에서 그래프의 모든 Tensor의 이름을 가져옵니다. (0) | 2023.10.30 |