Привет, сегодня я работал с woo-commerce и успешно создал несколько настраиваемых полей оформления заказа в соответствии с требованиями пользователя, но не могу сохранить их в базе данных.
Вот как я создал настраиваемые поля оформления заказа... это в дочерней теме functions.php
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
// Over Ridding, Removing, Creating New Fields.
function custom_override_checkout_fields( $fields ) {
unset($fields['billing']['billing_company']);
unset($fields['billing']['billing_address_2']);
unset($fields['order']['order_comments']);
unset($fields['billing']['billing_address_1']);
unset($fields['billing']['billing_city']);
unset($fields['billing']['billing_postcode']);
unset($fields['billing']['billing_email']);
$fields['billing']['your_name'] = array(
'type' => 'text',
'label' => __('Full Name', 'woocommerce'),
'placeholder' => _x('Full Name', 'placeholder', 'woocommerce'),
'required' => false,
'class' => array('form-row-wide'),
'clear' => true
);
$fields['billing']['your_phone_number'] = array(
'type' => 'text',
'label' => __('Your Phone Number', 'woocommerce'),
'placeholder' => _x('Your Phone Number', 'placeholder', 'woocommerce'),
'required' => false,
'class' => array('form-row-wide'),
'clear' => true
);
$fields['billing']['recipient_name'] = array(
'type' => 'text',
'label' => __("Recipient's Name", 'woocommerce'),
'placeholder' => _x("Recipient's Name", 'placeholder', 'woocommerce'),
'required' => false,
'class' => array('form-row-wide'),
'clear' => true
);
$fields['billing']['recipient_company_name'] = array(
'type' => 'text',
'label' => __("Recipient's Company (if any)", 'woocommerce'),
'placeholder' => _x("Recipient's Company (if any)", 'placeholder', 'woocommerce'),
'required' => false,
'class' => array('form-row-wide'),
'clear' => true
);
$fields['billing']['recipient_phone_number'] = array(
'type' => 'text',
'label' => __("Recipient's Phone Number", 'woocommerce'),
'placeholder' => _x("Recipient's Phone Number", 'placeholder', 'woocommerce'),
'required' => false,
'class' => array('form-row-wide'),
'clear' => true
);
$fields['billing']['recipient_address'] = array(
'type' => 'text',
'label' => __("Recipient's Address", 'woocommerce'),
'placeholder' => _x("Recipient's Address", 'placeholder', 'woocommerce'),
'required' => false,
'class' => array('form-row-wide'),
'clear' => true
);
return $fields;
}
В БД, где я ищу поля. его wp_postmeta
таблица. Прикреплен снимок экрана, который я ищу с идентификатором заказа. stack.imgur.com/NdNTr.png" alt="wp_postmeta db table">
Теперь я добавил действие checkout_update_order_meta
, чтобы обновить метаданные заказа и сохранить созданные мной поля. Но похоже, что это не работает, потому что, когда я проверяю таблицу wp_postmeta
с последним созданным идентификатором заказа, я не нахожу там свои настраиваемые поля.
add_action( 'woocommerce_checkout_update_order_meta', 'some_custom_checkout_field_update_order_meta' );
function some_custom_checkout_field_update_order_meta( $order_id ) {
if ( ! empty( $_POST['recipient_address'] ) ) {
add_post_meta( $order_id, 'recipient_address', sanitize_text_field( $_POST['recipient_address'] ) );
}
if (!empty($_POST['recipient_phone_number'])) {
update_post_meta($order_id, 'recipient phone number', sanitize_text_field($_POST['recipient_phone_number']));
}
}
Это мое первое дело с кодом woocommerce, я много искал и пришел сюда, когда отказался от него. Пожалуйста, помогите мне разгадать эту загадку.
Пожалуйста, поправьте меня, что я делаю неправильно. Кроме того, после этого шага мне нужно будет отобразить эти настраиваемые поля на панели инструментов WordPress в разделе woocommerce> заказы> сведения о заказе, поэтому, если есть какая-либо полезная ссылка для этого, пожалуйста, предоставьте.
Заранее спасибо.