programing

WooCommerce 체크아웃 필드 사이에 제목을 추가하는 방법

bestprogram 2023. 10. 29. 19:53

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-rowWoocommerce(제가 모르는 이유)에 의해 모든 청구분야의 상위에 올려질 것입니다.이것은 우리에게 이것이 "핵"과 여러분의 목표가 다르게 더 잘 달성된다는 것을 보여줍니다.

기존의 것을 연결하는 대신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