체크 아웃 사용자 정의 필드 값을 저장하고 WooCommerce 관리자 주문에 표시
Jan 07 2021
주문과 관련된 특정 사항에 대해 고객에게 질문 할 수있는 추가 필드가 체크 아웃에 있습니다. 이들 중 대부분은 텍스트 입력 필드이지만 내 고객 사이트에 대해 어떻게 들었는지 묻는 선택 메뉴가 하나 있습니다. 선택한 옵션에 대한 주문의 메타 영역에 값을 표시하는 방법을 알 수 없습니다. 내 테마의 functions.php 파일에서 드롭 다운을 선택하는 방법은 다음과 같습니다.
woocommerce_form_field( 'aba_hear', array(
'type' => 'select',
'required' => 'true',
'class' => array('hear-class form-row-wide'),
'label' => __('How did You Hear About Us?'),
'options' => array( // options for <select> or <input type="radio" />
'' => 'Please select', // empty values means that field is not selected
'Instagram' => 'Instagram',
'Facebook' => 'Facebook',
'Yelp' => 'Yelp',
'Other' => 'Other',
)
), $checkout->get_value( 'aba_hear' ) );
이제 주문 메타 값을 업데이트하는 함수를 추가합니다.
add_action( 'woocommerce_checkout_update_order_meta', 'aba_checkout_field_update_order_meta' );
function aba_checkout_field_update_order_meta( $order_id ) {
if ( ! empty( $_POST['aba_hear'] ) ) { update_post_meta( $order_id, 'How did You Hear About Us?', sanitize_text_field( $_POST['aba_hear'] ) );
}
}
마지막으로 주문 페이지에 값을 표시합니다.
add_action( 'woocommerce_admin_order_data_after_billing_address', 'aba_checkout_field_display_admin_order_meta', 10, 1 );
function aba_checkout_field_display_admin_order_meta($order){
echo '<p><strong>'.__('How did You Hear About Us?').':</strong> ' . get_post_meta( $order->id, 'Is this a Gift?', true ) . '</p>';
}
마지막으로 체크 아웃시 선택 메뉴 코드가 표시되는 방법은 다음과 같습니다.
<p class="form-row hear-class form-row-wide validate-required" id="aba_hear_field" data-priority="">
<label for="aba_hear" class="">How did You Hear About Us? <abbr class="required" title="required">*</abbr></label>
<span class="woocommerce-input-wrapper">
<select name="aba_hear" id="aba_hear" class="select " data-allow_clear="true" data-placeholder="Please select">
<option value="" selected='selected'>Please select</option>
<option value="Instagram" >Instagram</option>
<option value="Facebook" >Facebook</option>
<option value="Yelp" >Yelp</option>
<option value="Other" >Other</option>
</select>
</span>
</p>
이제 이것은 텍스트 입력 필드에서는 잘 작동하지만 선택 메뉴에서는 작동하지 않습니다. 결과 데이터를 표시 할 수 있도록 작동하도록 변경하려면 어떻게해야합니까?
답변
1 LoicTheAztec Jan 07 2021 at 15:07
일부 기능에 오류가 있습니다… 다음 기능에서 메타 키와 동일한 체크 아웃 필드 키를 사용해야합니다.
두 번째 함수에서는 다른 후크를 사용하고 사용자 지정 필드도 사용자 메타 데이터로 저장합니다.
add_action( 'woocommerce_checkout_create_order', 'aba_checkout_field_update_order_meta' );
function aba_checkout_field_update_order_meta( $order ) { if ( isset($_POST['aba_hear']) && ! empty($_POST['aba_hear']) ) { $order->update_meta_data( '_aba_hear', sanitize_text_field( $_POST['aba_hear'] ) ); // Update user data if( $order->get_user_id() > 0 ) {
update_user_meta( $order->get_user_id(), 'aba_hear', true );
}
}
}
세 번째 기능에서 다음을 사용하십시오.
add_action( 'woocommerce_admin_order_data_after_billing_address', 'aba_checkout_field_display_admin_order_meta', 10, 1 );
function aba_checkout_field_display_admin_order_meta( $order ){
$value = $order->get_meta( '_aba_hear' );
if ( ! empty($value) ) { echo '<p><strong>'.__('How did You Hear About Us?').':</strong> ' . $value . '</p>';
}
}
이제 더 잘 작동 할 것입니다.
메모:
이 체크 아웃 필드를 사용자 지정 사용자 메타 데이터로 저장하는 이유는 무엇입니까?
첫 번째 기능
$checkout->get_value( 'aba_hear' )
에서이 사용자 정의 체크 아웃 필드의 고객 마지막 주문에서 선택한 값을 표시하기 때문입니다. 값은 사용자 메타 'aba_hear'에서 읽습니다.