지정된 범주의 제품이있는 경우에만이 사용자 정의 필드를 표시해야합니다. 그런 다음 필드 만 필요합니다.정의 된 제품 범주에 대한 결제 청구 필드 설정 해제. 장바구니 항목 만 독점적으로
아래 코드는 단지 표시하도록 설정되어 있습니다 : none 필드는 실제로 체크 아웃을 클릭하면 "myfield 필드가 필요합니다"라는 오류가 있지만 표시를 설정하지 않으려면 필드를 제거해야합니다. .
제발 뭐라하니?
나는 최신 버전의 WooCommerce가 있습니다. 또한 다른 카테고리가있는 경우 필요에 따라
/**
* Add the field to the checkout
*/
add_filter('woocommerce_checkout_fields' , 'custom_override_checkout_fields');
// Our hooked in function - $fields is passed via the filter!
function custom_override_checkout_fields($fields) {
$fields['billing']['my_field_name'] = array(
'label' => __('Codice medico', 'woocommerce'),
'placeholder' => _x('Inserisci il codice del tuo medico', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'clear' => true
);
return $fields;
}
/**
* Process the checkout
*/
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
// Check if set, if its not set add an error.
if (! $_POST['my_field_name'])
wc_add_notice(__('<h4 style="color:red;">Stai acquistando un prodotto per cui è necessaria la prescrizione medica. Per favore inserisci il codice del tuo medico per proseguire. Grazie.</h4>'), 'error');
}
/**
* Update the order meta with field value
*/
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');
function my_custom_checkout_field_update_order_meta($order_id) {
if (! empty($_POST['my_field_name'])) {
update_post_meta($order_id, 'Codice Medico', sanitize_text_field($_POST['my_field_name']));
}
}
/**
* Display field value on the order edit page
*/
add_action('woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1);
function my_custom_checkout_field_display_admin_order_meta($order){
echo '<p><strong>'.__('Codice Medico').':</strong> ' . get_post_meta($order->id, 'Codice Medico', true) . '</p>';
}
/* Adding Custom Fields to Emails
1. Add this snippet to your theme's functions.php file
2. Change the meta key names in the snippet
3. Create a custom field in the order post - e.g. key = "Tracking Code" value = abcdefg
4. When next updating the status, or during any other event which emails the user, they will see this field in their email
*/
add_filter('woocommerce_email_order_meta_keys', 'my_custom_order_meta_keys');
function my_custom_order_meta_keys($keys) {
$keys[] = 'Codice Medico'; // This will look for a custom field called 'Tracking Code' and add it to emails
return $keys;
}
/**
* Conditionally remove checkout fields
*/
add_filter('woocommerce_checkout_fields' , 'conditional_unset_checkout_field');
function conditional_unset_checkout_field($fields) {
$categories = array('prodotti-in-polvere-e-bustine', 'gel-e-creme', 'prodotti-in-capsule', 'prodotti-plantari', 'prodotti-liquidi', 'area-riservata');
$has_cat = false;
// Iterating through each cart items (products)
foreach(WC()->cart->get_cart() as $cart_item){
// Iterating through each category in your array
foreach($categories as $category){
if (has_term($category, 'product_cat', $cart_item['product_id'])) {
$has_cat = true;
break;
}
}
if ($has_cat) break;
}
// If one of the categories is in one cart item, we unset the field
if ($has_cat) {
unset($fields['billing']['my_field_name']);
}
return $fields;
}