问题描述
我的结账中有一些额外的字段,用于向客户询问有关其订单的某些事项。其中大部分是文本输入字段,但有一个选择菜单询问他们如何听说我的客户网站。我一直无法弄清楚如何在所选选项的订单元区域中显示值。下面是我如何从我的主题在我的 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>
现在,这适用于文本输入字段,但不适用于选择菜单。如何更改它以使其正常工作,以便显示结果数据?
解决方法
您的某些功能存在一些错误……您需要在以下功能中使用与元键相同的结帐字段键:
在第二个函数中,您使用另一个钩子并将自定义字段也保存为用户元数据:
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”读取的。