Добавление значения пользовательского поля для заказа деталей

Разработка веб-магазина WooCommerce с поставщиками (вендорами WC).

Мне нужно отобразить настраиваемое поле, которое я создал в профиле поставщиков. Он будет отображаться под именем товара и поставщика в файле order-details.php .

Как отобразить поле профиля с помощью этого идентификатора продавца / продавца?
Кто-нибудь может мне помочь?

Вот скриншот, о котором я бы солгал:

Информация для заказа

Пользовательские поля профиля

Добавление пользовательских полей на страницу профиля пользователя

 add_action( 'show_user_profile', 'wp_added_user_profile_fields' ); function wp_added_user_profile_fields( $user ) { ?> <table class="form-table"> <tr> <th><label for="billing_enumber"><?php _e( "eNumber", 'woocommerce' ); ?></label></th> <td> <input type="text" name="billing_enumber" id="billing_enumber" class="regular-text" value="<?php echo esc_attr( get_the_author_meta( 'billing_enumber', $user->ID ) ); ?>"/> <span class="description"><?php _e( 'Please enter your eNumber.', 'woocommerce' ); ?></span> </td> </tr> </table> <?php } 

Добавление функции обновления в пользовательские поля в профиле пользователя

 add_action( 'edit_user_profile', 'wp_added_user_profile_fields' ); function wp_save_added_user_profile_fields( $user_id ) { if ( current_user_can( 'edit_user', $user_id ) ) { update_user_meta( $user_id, 'billing_enumber', trim($_POST['billing_enumber'] ) ); $saved = true; } return true; } 

Благодарю.

Solutions Collecting From Web of "Добавление значения пользовательского поля для заказа деталей"

Вы можете сделать это чистым способом в 2 шага:

ШАГ 1) Сначала вам нужно добавить атрибут в свои продукты, чтобы получить «читаемую метку» для вашего настраиваемого значения поля , которое будет отображаться как метаданные элементов заказа.

В вашем случае вы создадите атрибут «Billing E Number»:

введите описание изображения здесь

Затем вы установите его с любым значением (поскольку оно будет заменено вашим настраиваемым значением поля) в ваших целевых продуктах, которые могут быть простыми или переменными. Если вы не установите значение с этим атрибутом, оно не будет установлено и сохранено при обновлении продукта.

введите описание изображения здесь

После этого вы будете иметь это после сохранения и обновления:

введите описание изображения здесь

Затем атрибуты slugs в woocommerce начинаются с pa_ . Таким образом, ваш атрибут slug будет: pa_billing-e-number

Мы будем использовать его в приведенной ниже функции, чтобы отобразить эту удобочитаемую метку для вашего пользовательского значения поля. поэтому вы попадете в пункты заказа: Billing E Number: (some value)


ШАГ 2) Ваша пользовательская функция зацепилась за woocommerce_add_order_item_meta действия woocommerce_add_order_item_meta .

Теперь, чтобы отобразить ваше настраиваемое поле в деталях позиций заказов, вам нужно будет получить это переданное значение для сохранения в качестве метаданных элементов заказа, и мы будем использовать здесь pa_billing-e-Number как meta_key .

Таким образом, код будет просто что-то вроде:

 add_action('woocommerce_add_order_item_meta', 'add_custom_order_item_meta_data', 1, 3 ); function add_custom_order_item_meta_data( $item_id, $values, $cart_item_key ) { global $order; // Get the user ID $user_id = get_post_meta( $order->id, '_customer_user', true ); // Get User custom field value for 'billing_enumber' $billing_e_number = get_user_meta( $user_id, 'billing_enumber', true ); // Setting this custom field in order item meta if(!empty($billing_e_number)) wc_add_order_item_meta($item_id, 'pa_billing-e-number', $billing_e_number, true); } 

Этот код находится в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

Затем на лицевой стороне в разделе «Моя учетная запись»> «Заказы»> «Просмотр заказа» вы получите следующее:

введите описание изображения здесь

Как вы можете видеть, вы получаете ровно что-то подобное в обычном поведении woocommerce. Значение здесь просто для иллюстрации этого примера …

Этот пример действительно протестирован и работает.