Как правильно настроить пользовательское поле оформления заказа WooCommerce, которое может редактировать как пользователPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно настроить пользовательское поле оформления заказа WooCommerce, которое может редактировать как пользовател

Сообщение Anonymous »

Я новичок в настройке PHP и WooCommerce, и я попытался реализовать настраиваемое поле оформления заказа для получения номера освобождения от уплаты налогов. Хотя мне удалось создать и отобразить поле, я не уверен, что моя реализация завершена. Я буду признателен за любые комментарии или рекомендации по моей настройке и приношу извинения, если разместил это неправильно.
Во время исследования я рассмотрел следующее:
  • BusinessBloomer: WooCommerce: как добавить настраиваемое поле оформления заказа
  • Настройка полей оформления заказа в WooCommerce
  • Stack Переполнение: загрузка пользовательских данных в пользовательские поля нового заказа администратора WooCommerce.
  • Переполнение стека: получение и отображение введенных данных из пользовательских полей Checkout в WooCommerce.

    Что я пробовал:
    • Я использовал фильтр woocommerce_billing_fields, чтобы добавить новый поле для номера освобождения от уплаты налогов в раздел выставления счетов при оформлении заказа.
    • Я использовал действие woocommerce_checkout_create_order, чтобы сохранить данные поля как в мета-заказе, так и в мета-мета пользователя.< /li>
      Отображение в деталях заказа администратора:
  • Включено поле с использованием woocommerce_admin_billing_fields
  • code> filter.
  • Я убедился, что данные поля загружаются через AJAX (woocommerce_ajax_get_customer_details) при выборе клиента для заказа вручную.
  • Разрешено администратору исправлять поле значение с помощью действия woocommerce_process_shop_order_meta.
  • Я использовал действие woocommerce_order_details_after_customer_details, чтобы отобразить поле в деталях заказа клиента и на странице благодарности (при входе в систему). И woocommerce_email_customer_details для отображения поля в уведомлениях по электронной почте.
Вот полный код, который я реализовал на данный момент:
/**
* WooCommerce: Custom Billing Checkout Field (Tax Exempt #)
*/
function custom_checkout_fields_settings() {
$text_domain = 'woocommerce';
return array(
'tax_exempt_number' => __('Tax Exempt #', $text_domain),
);
}

// Add Tax Exempt # Field to Checkout and My Account Edit Address
add_filter( 'woocommerce_billing_fields' , 'custom_billing_field' );
function custom_billing_field( $fields ) {
$fields['billing_tax_exempt_number'] = array(
'label' => __('Tax Exempt #', 'woocommerce'),
'placeholder' => _x('Enter Your Tax Exempt Number', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'clear' => true,
'priority' => 35,
);
return $fields;
}

// Display Tax Exempt # Field on admin edit order page
add_filter( 'woocommerce_admin_billing_fields', 'admin_single_order_custom_addresses_fields' );
function admin_single_order_custom_addresses_fields( $fields ) {
$settings = custom_checkout_fields_settings();

foreach ( $settings as $field_key => $field_label ) {
$fields[$field_key] = array(
'label' => $field_label,
'show' => '0',
'wrapper_class' => 'form-field-wide',
);
}
return $fields;
}

// Load Ajax Tax Exempt # Field data as customer billing address field
add_filter( 'woocommerce_ajax_get_customer_details', 'add_custom_fields_to_ajax_customer_details', 10, 3 );
function add_custom_fields_to_ajax_customer_details( $data, $customer, $user_id ) {
// $settings = custom_checkout_fields_settings();

// foreach( $settings as $field_key => $field_label ) {
// $data['billing'][$field_key] = $customer->get_meta('billing_'.$field_key);
// }

// error_log(print_r($data,true));

$data['billing']['tax_exempt_number'] = $customer->get_meta('billing_tax_exempt_number');

return $data;
}

// Add Tax Exempt # Field to WooCommerce billing address in user profile
add_filter( 'woocommerce_customer_meta_fields' , 'user_profile_custom_fields' );
function user_profile_custom_fields( $fields ) {
$fields['billing']['fields']['billing_tax_exempt_number'] = array(
'label' => __( 'Tax Exempt #', 'woocommerce' ),
'description' => '',
);
return $fields;
}

// Display Tax Exempt # Field on email notifications
add_action('woocommerce_email_customer_details','display_custom_fields_on_emails_notifications', 30, 4 );
function display_custom_fields_on_emails_notifications( $order, $sent_to_admin, $plain_text, $email ) {
$settings = custom_checkout_fields_settings(); // Load settings

// Loop through setting fields
foreach ( $settings as $field_key => $field_label ) {
$meta_value = $order->get_meta('_billing_'.$field_key);
if ( ! empty($meta_value) ) {
echo '' . $field_label . ':' . ' ' . $meta_value . '';
}
}
}

// Save the Tax Exempt # Field from the admin order edit screen and update the user meta
// Note: Allow admin to correct any errors
add_action( 'woocommerce_process_shop_order_meta', 'save_custom_billing_field_and_update_user_meta', 45, 2 );

function save_custom_billing_field_and_update_user_meta( $order_id, $post ) {
$order = wc_get_order( $order_id );

$settings = custom_checkout_fields_settings(); // Load Settings

foreach ( $settings as $field_key => $field_label ) {
if ( isset( $_POST['_billing_' . $field_key] ) ) {
// Save the order meta data
$order->update_meta_data('_billing_' . $field_key, sanitize_text_field( $_POST['_billing_' . $field_key] ));

// Also update the user meta data if a customer ID is present
if ( $order->get_customer_id() ) {
update_user_meta( $order->get_customer_id(), 'billing_' . $field_key, sanitize_text_field( $_POST['_billing_' . $field_key] ) );
}
}
}

$order->save_meta_data();
}

// Save the Tax Exempt # Field (once order is placed)
add_action( 'woocommerce_checkout_create_order', 'save_custom_billing_field_on_create_order', 20, 2 );
function save_custom_billing_field_on_create_order( $order, $data ) {
if ( isset( $_POST['billing_tax_exempt_number'] ) && ! empty( $_POST['billing_tax_exempt_number'] ) ) {
$order->update_meta_data('_billing_tax_exempt_number', sanitize_text_field( $_POST['billing_tax_exempt_number'] ) );
update_user_meta( $order->get_customer_id(), 'billing_tax_exempt_number', sanitize_text_field( $_POST['billing_tax_exempt_number'] ) );
}
}

// Display Tax Exempt # Field in order details customer section using user meta
// Note: Shows on Thank You Page if User is Logged in.
add_action( 'woocommerce_order_details_after_customer_details', 'display_tax_exempt_number_in_order_details' );
function display_tax_exempt_number_in_order_details( $order ) {
// Get the user ID from the order
$user_id = $order->get_user_id();

// Get the tax exempt number from the user meta
$tax_exempt_number = get_user_meta( $user_id, 'billing_tax_exempt_number', true );

// If it exists, display the tax exempt #
if ( ! empty( $tax_exempt_number ) ) {
echo '
' . __('Tax Exempt #:', 'woocommerce') . ' ' . esc_html( $tax_exempt_number ) . '
';
}
}


Подробнее здесь: https://stackoverflow.com/questions/784 ... n-be-edite
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»