Как добавить пользовательские налоговые поля на страницы оформления заказа и адреса WooCommerce (на основе блоков GutenbPhp

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

Сообщение Anonymous »

Мне нужно добавить два поля с именами «Налоговое управление» и «Налоговый номер» после поля «Название компании» в форме платежной информации на страницах оплаты и адресов моего сайта WooCommerce.
Страница оплаты основана на блоках Гутенберга. Поэтому сначала я создал файл JavaScript с именем custom-checkout-fields.js со следующим содержимым:

Код: Выделить всё

// custom-checkout-fields.js
const initializeCheckoutBlocks = () => {
// WooCommerce Blocks API check
if (!window.wc || !window.wc.blocks || !window.wp) {
console.log('WooCommerce Blocks API could not be loaded');
return;
}

const { registerCheckoutBlock } = window.wc.blocks;
const { createElement } = window.wp.element;
const { TextControl } = window.wp.components;

// Tax fields component
const TaxFields = () => {
return createElement('div', { className: 'wc-block-checkout__tax-fields' },
[
createElement(TextControl, {
key: 'tax-office',
label: 'Tax Office',
required: true,
className: 'tax-office-field'
}),
createElement(TextControl, {
key: 'tax-number',
label: 'Tax Number',
required: true,
className: 'tax-number-field'
})
]
);
};

// Register block
registerCheckoutBlock({
metadata: {
name: 'tax-fields-block',
parent: ['woocommerce/checkout-billing-address-block'],
},
component: TaxFields
});
};

// Run when page is loaded
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initializeCheckoutBlocks);
} else {
initializeCheckoutBlocks();
}

// Check when WooCommerce Blocks are ready
document.addEventListener('wc-blocks-is-ready', initializeCheckoutBlocks);
В functions.php я добавил следующий код:

Код: Выделить всё

add_action('init', function() {
register_post_meta('shop_order', '_billing_tax_office', [
'type' => 'string',
'show_in_rest' => true,
'single' => true,
]);

register_post_meta('shop_order', '_billing_tax_number', [
'type' => 'string',
'show_in_rest' => true,
'single' => true,
]);
});

// Add fields to Store API
add_action('woocommerce_blocks_checkout_update_order_meta', function($order) {
if (!empty($_POST['tax_office'])) {
$order->update_meta_data('_billing_tax_office', sanitize_text_field($_POST['tax_office']));
}
if (!empty($_POST['tax_number'])) {
$order->update_meta_data('_billing_tax_number', sanitize_text_field($_POST['tax_number']));
}
});
Чтобы добавить поля в форму на странице адресов, я использовал следующий код:

Код: Выделить всё

// Add tax fields to checkout page
add_filter('woocommerce_checkout_fields', 'add_tax_fields_to_checkout');

function add_tax_fields_to_checkout($fields) {
$fields['billing']['billing_tax_office'] = array(
'label' => 'Tax Office',
'placeholder' => 'Enter your Tax Office',
'required' => true,
'class' => array('form-row-wide'),
'clear' => true,
'priority' => 120
);

$fields['billing']['billing_tax_number'] = array(
'label' => 'Tax Number',
'placeholder' => 'Enter your Tax Number',
'required' => true,
'class' => array('form-row-wide'),
'clear' => true,
'priority' => 121
);

return $fields;
}

// Save tax fields in the order
add_action('woocommerce_checkout_update_order_meta', 'save_tax_fields');

function save_tax_fields($order_id) {
if (!empty($_POST['billing_tax_office'])) {
update_post_meta($order_id, '_billing_tax_office', sanitize_text_field($_POST['billing_tax_office']));
}
if (!empty($_POST['billing_tax_number'])) {
update_post_meta($order_id, '_billing_tax_number', sanitize_text_field($_POST['billing_tax_number']));
}
}

// Show tax fields in admin panel order details
add_action('woocommerce_admin_order_data_after_billing_address', 'show_tax_fields_in_admin');

function show_tax_fields_in_admin($order) {
echo '
[b]Tax Office:[/b] ' . get_post_meta($order->get_id(), '_billing_tax_office', true) . '
';
echo '
[b]Tax Number:[/b] ' . get_post_meta($order->get_id(), '_billing_tax_number', true) .  '
';
}
Однако поля не отображаются ни в одной форме.

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

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

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

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

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

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

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