Показывать пользовательское поле под заказ в woocommerce
Я работаю над веб-магазином и следующ за этим учебником http://wcdocs.woothemes.com/snippets/tutorial-customising-checkout-fields-using-hooks-and-filters/, чтобы добавить некоторые поля пользовательских полей в мой биллинг.
// Hook in
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']['billing_gls_name'] = array(
'label' => __('Name for pickup person', 'woocommerce'),
'placeholder' => _x('Name', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'clear' => true
);
return $fields;
}
Это добавляет мое поле. Все идет нормально. Поэтому моя проблема:
Как я могу просмотреть это новое поле в представлении заказов? Детали для выставления счетов отображают только обычные поля фактуры.
Ответы
Ответ 1
Первый ответ (Cesar) был CLOSE правильным. В случае, если кто-либо сталкивается с этим старым сообщением, пытающимся выяснить то же самое, ниже приведен код, необходимый для вставки в ваш файл functions.php после кода, заданного исходным плакатом, с учетом его/ее переменных. Обратите внимание, что они используют имя поля "billing_gls_name" и что эта ссылка упоминается в нашей новой функции как "_billing_gls_name". Необходим дополнительный "_" в начале. Это работает на Wordpress 3.5.1 с WooCommerce 2.0.3.
function your_custom_field_function_name($order){
echo "<p><strong>Name of pickup person:</strong> " . $order->order_custom_fields['_billing_gls_name'][0] . "</p>";
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'your_custom_field_function_name', 10, 1 );
Ответ 2
После определения вашего настраиваемого поля (которое вы сделали в коде, упомянутом выше) добавьте следующий код:
Обработать ваше поле:
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
if (!$_POST['billing']['billing_gls_name']) {
wc_add_notice(__('Please tell us the Location Type that we are billing to.'), 'error');
}
}
Сохранить поле в БД в качестве метаданных заказа:
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['billing']['billing_gls_name'])) {
update_post_meta($order_id, 'Billing Gls Name', esc_attr($_POST['billing']['billing_gls_name_type']));
}
}
И, наконец, отобразите его на экране сведений о заказе:
add_action('woocommerce_admin_order_data_after_billing_address', 'my_custom_billing_fields_display_admin_order_meta', 10, 1);
function my_custom_billing_fields_display_admin_order_meta($order) {
echo '<p><strong>' . __('Billing Gls Name') . ':</strong><br> ' . get_post_meta($order->id, '_billing_gls_name', true) . '</p>';
}
Ответ 3
Добавив действие woocommerce_admin_order_data_after_billing_address
, вы можете вставить некоторые данные после выставления счетов. Пользовательские поля находятся под массивом $order->order_custom_fields
.
function display_rfc_in_order_metabox($order){
echo "<p><strong>RFC:</strong> {$order->order_custom_fields['_billing_rfc'][0]}</p>";
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'rxm_details_to_order', 10, 1 );