WooCommerce 체크아웃 필드 사이에 제목을 추가하는 방법
WooCommerce 체크아웃 페이지 필드를 커스터마이징하고 있습니다.필드 사이에 제목(텍스트)을 추가하고 싶습니다.이와 같은 필드를 다시 정렬했습니다.
add_filter('woocommerce_checkout_fields', 'ac_checkout_reorder_fields');
function ac_checkout_reorder_fields($fields) {
$order = array(
"billing_first_name",
"billing_last_name",
"billing_company",
"billing_email",
"billing_phone",
"billing_address_1",
"billing_address_2",
"billing_postcode",
"billing_country"
);
foreach($order as $field)
{
$ordered_fields[$field] = $fields["billing"][$field];
}
$fields["billing"] = $ordered_fields;
return $fields;
}
그다음에 이렇게 제목을 새로 붙였습니다.
add_action( 'woocommerce_after_checkout_billing_form', 'add_custom_heading' );
function add_custom_heading( $checkout ) {
echo '<div id="add_custom_heading"><h2>' . __('Custom Heading Here') . '</h2></div>' ;
}
이제 필드가 다시 정렬되고 사용자 정의 제목이 표시됩니다.하지만 저는 제목이 이름과 회사 필드 바로 아래에 표시되기를 원합니다.제 코드로 아래에 필드가 추가됩니다.내가 원하는 장소에 어떻게 위치시킬지.
추신: 이 후크로 전체 필드의 섹션 사용자 지정을 추가하려고 했습니다.woocommerce_checkout_fields
자리 표시자를 추가하고 레이블을 제거합니다.코드는 여기에 있지만 이것 또한 문제 해결에 도움이 되지 않습니다.
function add_wc_custom_fields($fields) {
global $woocommerce;
$countries_obj = new WC_Countries();
$countries = $countries_obj->__get('countries');
$fields['billing']['billing_first_name'] = array(
'label' => '',
'placeholder' => _x('First Name*', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array( 'form-row-first' ),
);
$fields['billing']['billing_last_name'] = array(
'label' => '',
'placeholder' => _x('last Name*', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array( 'form-row-last' ),
);
$fields['billing']['billing_company'] = array(
'label' => '',
'placeholder' => _x('Company Name', 'placeholder', 'woocommerce'),
'required' => false,
'class' => array('checkout-billing-company')
);
$fields['billing']['billing_address_1'] = array(
'label' => '',
'placeholder' => _x('Address(Line 1)*', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('checkout-billing-addressL1')
);
$fields['billing']['billing_address_2'] = array(
'label' => '',
'placeholder' => _x('Address(Line 2)*', 'placeholder', 'woocommerce'),
'required' => false,
'class' => array('checkout-billing-addressL2')
);
$fields['billing']['billing_email'] = array(
'label' => '',
'placeholder' => _x('Email Address*', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-first')
);
$fields['billing']['billing_phone'] = array(
'label' => '',
'placeholder' => _x('Phone Number', 'placeholder', 'woocommerce'),
'required' => false,
'class' => array('form-row-last')
);
$fields['billing']['billing_city'] = array(
'label' => '',
'placeholder' => _x('Town/City', 'placeholder', 'woocommerce'),
'required' => false,
'class' => array('form-row-first')
);
$fields['billing']['billing_state'] = array(
'label' => '',
'placeholder' => _x('State/County', 'placeholder', 'woocommerce'),
'required' => false,
'class' => array('form-row-first')
);
$fields['billing']['billing_postcode'] = array(
'label' => '',
'placeholder' => _x('Zip/Postcode', 'placeholder', 'woocommerce'),
'required' => false,
'class' => array('form-row-first')
);
$fields['billing']['billing_country'] = array(
'label' => '',
'type' => 'select',
'placeholder' => _x('Country', 'placeholder', 'woocommerce'),
'required' => false,
'class' => array('form-row-last'),
'options' => $countries
);
return $fields;
}
add_filter('woocommerce_checkout_fields', 'add_wc_custom_fields');
필터를 사용하면 됩니다.'woocommerce_form_field_' . $type
...어디에$type
입력의 종류는...우리의 경우에는billing_company
텍스트 형식입니다...이 필터는 필드의 html을 반환합니다. 우리의 경우 청구 필드의 경우,billing_company
.. 필터에는 4개의 인수가 전달됩니다. 이것들은$field
,$key
,$args
,$value
... 이 두개만 있으면 돼요
add_action( 'woocommerce_form_field_text','reigel_custom_heading', 10, 2 );
function reigel_custom_heading( $field, $key ){
// will only execute if the field is billing_company and we are on the checkout page...
if ( is_checkout() && ( $key == 'billing_company') ) {
$field .= '<p class="form-row form-row-wide">Custom Heading</p>';
}
return $field;
}
중요:클래스와 함께 단락 형식을 지정하지 않으면form-row
Woocommerce(제가 모르는 이유)에 의해 모든 청구분야의 상위에 올려질 것입니다.이것은 우리에게 이것이 "핵"과 여러분의 목표가 다르게 더 잘 달성된다는 것을 보여줍니다.
기존의 것을 연결하는 대신woocommerce_form_field_<field_type>
등의 필터woocommerce_form_field_text
, 저는 사용하는 것을 선호합니다.woocommerce_form_field_<field_type>
filter: 새 필드 유형을 만듭니다.이를 통해 추가 필드 유형에 대한 HTML 출력을 추가할 수 있으며(따라서 HTML 출력을 대신 머리글에 사용할 수 있습니다), 체크아웃 필드를 수정할 때 새로운 머리글 "필드 유형"을 사용할 수 있습니다.woocommerce_checkout_fields
거름망을 치다
// Add field type to WooCommerce form field
add_filter( 'woocommerce_form_field_heading','sc_woocommerce_form_field_heading', 10, 4 );
function sc_woocommerce_form_field_heading($field, $key, $args, $value) {
$output = '<h3 class="form-row form-row-wide">'.__( $args['label'], 'woocommerce' ).'</h3>';
echo $output;
}
// Modify checkout fields
add_filter( 'woocommerce_checkout_fields','custom_override_checkout_fields' );
function custom_override_checkout_fields( $fields ) {
$fields['billing']['billing_heading_name'] = array(
'type' => 'heading',
'label' => 'Heading here',
);
위의 방법을 사용하면 원래 질문에 대한 해결책은 다음과 같습니다.
add_filter('woocommerce_checkout_fields', 'ac_checkout_reorder_fields');
function ac_checkout_reorder_fields($fields) {
$fields['billing']['billing_heading_name'] = array(
'type' => 'heading',
'label' => 'Heading here',
);
$order = array(
"billing_first_name",
"billing_last_name",
"billing_heading_name",
"billing_company",
"billing_email",
"billing_phone",
"billing_address_1",
"billing_address_2",
"billing_postcode",
"billing_country"
);
foreach($order as $field) {
$ordered_fields[$field] = $fields["billing"][$field];
}
$fields["billing"] = $ordered_fields;
return $fields;
}
add_filter('woocommerce_form_field', 'addHeadingsInBetweenFormFields', 10, 4);
function addHeadingsInBetweenFormFields($field, $key, $args, $value = null) {
if (is_checkout() & $key === 'billing_first_name') {
$a = '<p class="form-row form-row-wide">Shipping</p>';
return $a . $field;
}
return $field;
}
언급URL : https://stackoverflow.com/questions/35811301/how-to-add-a-heading-in-between-checkout-fields-of-woocommerce
'programing' 카테고리의 다른 글
임의 AND 절이 있는 동적 스프링 데이터 jpa 저장소 쿼리 (0) | 2023.10.29 |
---|---|
fill_parent와 wrap_content의 차이점은 무엇입니까? (0) | 2023.10.29 |
jQuery를 사용하여 비디오 src를 어떻게 변경합니까? (0) | 2023.10.29 |
요청이 ajax인지 아닌지 확인하는 방법 뒤의 코드 - ASPNET 웹폼 (0) | 2023.10.29 |
PHP 스크립트로 멀티사이트에서 새로운 사이트를 동적으로 만드는 방법은? (0) | 2023.10.29 |