#php #wordpress #woocommerce #advanced-custom-fields
#php #wordpress #woocommerce #расширенные пользовательские поля
Вопрос:
Как мне установить значение пользовательского поля в заказе при отправке заказа на выбранное значение в HTML-компоненте?
Я внедрил пользовательский HTML-компонент внутри формы оформления заказа, выбранное значение которого я хочу вставить в пользовательское поле в своих заказах. Но я не могу понять, как подключить эти вещи. Я пришел к чему-то вроде:
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
function custom_override_checkout_fields( $fields ) {
$fields['order']['special_delivery'] = 'The value from HTML';
return $fields;
}
Но я даже не уверен, что это правильный путь.
Есть идеи?
Ответ №1:
Использование woocommerce_after_checkout_billing_form
позволяет добавлять пользовательские поля в форму оформления заказа. Вам также необходимо сохранить поле в мета — порядке использования woocommerce_checkout_update_order_meta
.
В следующем коде есть настраиваемое текстовое поле, используемое для сохранения идентификатора плательщика НДС. Не стесняйтесь избавляться от префиксов «mrank». Также переименуйте поле по мере необходимости.
Он покажет вам, как добавить поле и сохранить в мета-порядке.
/**
* VAT Number in WooCommerce Checkout
*/
function mrank_vat_field( $checkout ) {
echo '<div id="mrank_vat_field">';
woocommerce_form_field( 'vat_number', array(
'type' => 'text',
'class' => array( 'vat-number-field form-row-wide') ,
'label' => __( 'VAT-ID' ),
'placeholder' => __( 'Enter number' ),
'description' => __( 'Please enter your VAT-ID' ),
'required' => true,
), $checkout->get_value( 'vat_number' ));
echo '</div>';
}
add_action( 'woocommerce_after_checkout_billing_form', 'mrank_vat_field' );
/**
* Save VAT Number in the order meta
*/
function mrank_checkout_vat_number_update_order_meta( $order_id ) {
if ( ! empty( $_POST['vat_number'] ) ) {
update_post_meta( $order_id, '_vat_number', sanitize_text_field( $_POST['vat_number'] ) );
}
}
add_action( 'woocommerce_checkout_update_order_meta', 'mrank_checkout_vat_number_update_order_meta' );
Комментарии:
1. Я попытался реализовать то, что вы описали. Похоже, это не работает. Но это определенно кажется правильным способом делать что-то. Я думаю, что проблема заключается в том, что я хотел бы сохранить значение в расширенном пользовательском поле. В вашем примере используются более распространенные метаполя, не так ли? Как бы мне вставить это значение в пользовательское поле?
2. Есть ли причина, по которой вы хотите использовать расширенные пользовательские поля вместо мета-поля в заказе? Я не вижу причины, по которой это могло бы иметь значение. Но, конечно, вы можете
update_post_meta( ...)
просто добавить функцию для обновления вашего ACF-поля:update_field( 'field_key', sanitize_text_field( $_POST['vat_number'], $order_id );
3. Нет особенно веской причины, кроме того, что он настроен таким образом: D Я все еще не могу заставить его работать. Я чувствую, что делаю именно то, что вы описываете. Я обновил начальный пост, указав, что такое мой код, если бы вы могли видеть, что я делаю неправильно, это было бы потрясающе! 🙂
4. Куда вы поместили этот код? Внутри пользовательского плагина или functions.php , или где-то еще? Если вам не нужно использовать ACF, пожалуйста, просто используйте мой «update_post_meta», потому что в вашем заказе будет новое мета-поле, и это нормально. Нет необходимости в ACF 😉
5. Я помещаю это внутрь form-billing.php : о