Этот код добавит третье поле цены в карточку товара сайта WooCommerce с возможностью сохранения, редактирования и вывода на фронтенде.
1. Регистрация мета-поля в functions.php:
function poet_register_additional_price_meta() {
add_post_type_support('product', 'custom_price_field');
register_post_meta('product', 'additional_product_price', [
'show_in_rest' => true,
'type' => 'number',
'single' => true,
'default' => '',
]);
}
add_action('init', 'poet_register_additional_price_meta');
2. Добавление поля в панель редактирования карточки товара:
function poet_add_custom_price_field_to_product_data() {
woocommerce_wp_text_input([
'id' => 'additional_product_price',
'label' => __('Дополнительная цена', 'textdomain'). ' (' . get_woocommerce_currency_symbol() . ')',
'placeholder' => __('Введите дополнительную цену', 'textdomain'),
'desc_tip' => true,
'description' => __('Третье поле цены для специальных условий', 'textdomain')
]);
}
add_action('woocommerce_product_options_pricing', 'poet_add_custom_price_field_to_product_data');
3. Сохранение значения поля:
function poet_save_additional_price_meta($post_id) {
$additional_price = isset($_POST['additional_product_price'])
? wc_clean($_POST['additional_product_price'])
: '';
update_post_meta($post_id, 'additional_product_price', $additional_price);
}
add_action('woocommerce_process_product_meta', 'poet_save_additional_price_meta');
4. Сохранение значения поля:
function poet_display_additional_product_price() {
global $product;
$additional_price = get_post_meta($product->get_id(), 'additional_product_price', true);
if ($additional_price) {
echo '<div class="additional-product-price">';
echo '<span class="label">' . __('Специальная цена:', 'textdomain') . '</span>';
echo '<span class="price">' . wc_price($additional_price) . '</span>';
echo '</div>';
}
}
add_action('woocommerce_single_product_summary', 'poet_display_additional_product_price', 25);
5. Для REST API (опционально):
function poet_add_additional_price_to_product_response($response, $post, $request) {
$additional_price = get_post_meta($post->ID, 'additional_product_price', true);
if ($additional_price) {
$response->data['additional_price'] = $additional_price;
}
return $response;
}
add_filter('woocommerce_rest_product_object_response', 'poet_add_additional_price_to_product_response', 10, 3);