Как добавить третье поле цены в карточку товара WooCommerce?

Этот код добавит третье поле цены в карточку товара сайта 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);

Автор

Evgeni

На этом сайте делюсь заметками для начинающих по работе в macOS и Windows, а также по веб-разработке на WordPress. Надеюсь увидеть вас в числе своих подписчиков.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *