Ödeme özel alan değerini kaydedin ve WooCommerce yönetici siparişlerinde görüntüleyin
Müşteriden siparişleriyle ilgili belirli şeyler hakkında soru sormak için kasamda bazı ek alanlar var. Bunların çoğu metin giriş alanlarıdır, ancak müşterilerimin sitesini nasıl duyduklarını soran bir Seçim menüsü vardır. Seçilen seçenek için siparişin meta alanındaki değeri nasıl görüntüleyeceğimi çözemedim. İşte temamdan functions.php dosyamda bu seçme açılır menüsünü nasıl oluşturduğum.
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' ) );
Şimdi sipariş meta değerlerini güncellemek için bir işlev ekliyorum:
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'] ) );
}
}
Ve son olarak sipariş sayfasındaki değeri görüntüleyin:
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>';
}
Son olarak, seçim menüsünün kodu ödeme sırasında şu şekilde görünür:
<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>
Şimdi, bu metin giriş alanları için iyi çalışıyor, ancak menüleri seçmiyor. Elde edilen verileri görüntüleyebilmek için çalışmasını sağlamak için bunu nasıl değiştirebilirim?
Yanıtlar
Bazı işlevlerinizde bazı hatalar var… Aşağıdaki işlevlerde meta anahtar olarak aynı ödeme alan anahtarını kullanmanız gerekir:
2. işlevde, başka bir kanca kullanır ve özel alanı da kullanıcı meta verileri olarak kaydedersiniz:
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 );
}
}
}
3. işlevde şunu kullanın:
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>';
}
}
Şimdi çalışsa iyi olur.
Notlar:
Bu ödeme alanını neden özel kullanıcı meta verileri olarak kaydetmelisiniz?
Çünkü ilk işlevinizde
$checkout->get_value( 'aba_hear' )
, bu özel ödeme alanında müşterinin son siparişinden seçilen değeri gösterecek olana sahipsiniz . Değer, kullanıcı meta 'aba_hear'dan okunur.