Afișarea prețului pe metru liniar și prețul total al rolei în WooCommerce

YouTube Logo Urmărește canalul nostru de YouTube

În acest articol, vom implementa o funcționalitate personalizată pentru WooCommerce, care permite adăugarea lungimii unei role și a prețului pe metru liniar. Calculul prețului total al rolei se va face automat și va fi afișat pe pagina produsului, dar și în coșul de cumpărături.

Funcționalitățile codului

  1. Adaugă un câmp pentru lungimea rolei (în metri) în pagina de editare a produsului.
  2. Adaugă un câmp pentru prețul pe metru liniar (lei) în pagina de editare a produsului.
  3. Salvează valorile acestor câmpuri pentru fiecare produs.
  4. Calculează automat prețul total al rolei pe baza lungimii și a prețului pe metru liniar.
  5. Afișează prețul total al rolei pe pagina produsului și în coșul de cumpărături.
  6. Stilizează afișarea prețului total al rolei pentru a fi mai vizibil.

Codul complet

Adaugă următorul cod în fișierul functions.php al temei tale active sau într-un plugin personalizat:

// Adaugă câmpul pentru lungimea rolei
add_action('woocommerce_product_options_general_product_data', 'add_custom_length_field');

function add_custom_length_field() {
    woocommerce_wp_text_input(
        array(
            'id' => '_roll_length',
            'label' => __('Lungimea rolei (m)', 'woocommerce'),
            'desc_tip' => 'true',
            'description' => __('Introdu lungimea rolei în metri', 'woocommerce'),
            'type' => 'number',
            'custom_attributes' => array(
                'step' => '0.01',
                'min' => '0'
            )
        )
    );
}

// Salvează lungimea rolei
add_action('woocommerce_process_product_meta', 'save_custom_length_field');

function save_custom_length_field($post_id) {
    $roll_length = isset($_POST['_roll_length']) ? sanitize_text_field($_POST['_roll_length']) : '';
    update_post_meta($post_id, '_roll_length', $roll_length);
}

// Adaugă câmpul pentru prețul pe metru liniar
add_action('woocommerce_product_options_general_product_data', 'add_custom_price_per_ml_field');

function add_custom_price_per_ml_field() {
    woocommerce_wp_text_input(
        array(
            'id' => '_price_per_ml',
            'label' => __('Preț pe metru liniar (lei)', 'woocommerce'),
            'desc_tip' => 'true',
            'description' => __('Introdu prețul pe metru liniar', 'woocommerce'),
            'type' => 'number',
            'custom_attributes' => array(
                'step' => '0.01',
                'min' => '0'
            )
        )
    );
}

// Salvează prețul pe metru liniar
add_action('woocommerce_process_product_meta', 'save_custom_price_per_ml_field');

function save_custom_price_per_ml_field($post_id) {
    $price_per_ml = isset($_POST['_price_per_ml']) ? sanitize_text_field($_POST['_price_per_ml']) : '';
    update_post_meta($post_id, '_price_per_ml', $price_per_ml);
}

// Calculează prețul total al rolei în coș
add_action('woocommerce_before_calculate_totals', 'update_product_price_in_cart');

function update_product_price_in_cart($cart_object) {
    foreach ($cart_object->get_cart() as $cart_item) {
        $product_id = $cart_item['product_id'];
        $roll_length = get_post_meta($product_id, '_roll_length', true);
        $price_per_ml = get_post_meta($product_id, '_price_per_ml', true);

        if ($roll_length > 0 && $price_per_ml > 0) {
            $total_price = $roll_length * $price_per_ml;
            $cart_item['data']->set_price($total_price);
        }
    }
}

// Afișează prețul total al rolei pe pagina produsului
add_action('woocommerce_single_product_summary', 'display_total_price_per_roll', 25);

function display_total_price_per_roll() {
    global $product;
    $roll_length = get_post_meta($product->get_id(), '_roll_length', true);
    $price_per_ml = get_post_meta($product->get_id(), '_price_per_ml', true);

    if ($roll_length > 0 && $price_per_ml > 0) {
        $total_price = $roll_length * $price_per_ml;
        echo '<p class="highlighted-price">' . __('Preț total rolă: ', 'woocommerce') . wc_price($total_price) . '</p>';
    }
}

// Stilizează afișarea prețului total al rolei
add_action('wp_head', 'custom_css_for_product_price');

function custom_css_for_product_price() {
    ?>
    <style>
        .highlighted-price {
            font-size: 18px; /* Mărimea textului */
            color: #333; /* Culoarea textului */
            font-weight: bold; /* Îngroșarea textului */
            padding: 10px; /* Spațiu în jurul textului */
            border: 1px dashed #333; /* Linie punctată ca chenar */
            border-radius: 5px; /* Colțuri rotunjite */
            display: inline-block; /* Afișăm ca bloc pentru a gestiona mai bine spațiul */
        }
    </style>
    <?php
}

Explicația codului

  1. Adăugarea câmpurilor personalizate
    • Lungimea rolei și prețul pe metru liniar sunt definite folosind funcția woocommerce_wp_text_input și salvate în meta datele produsului cu update_post_meta.
  2. Calcularea prețului total
    • Filtrul woocommerce_before_calculate_totals calculează prețul total al rolei pe baza lungimii și a prețului pe metru liniar și actualizează prețul în coșul de cumpărături.
  3. Afișarea prețului total
    • Prețul total este afișat pe pagina produsului utilizând acțiunea woocommerce_single_product_summary.
  4. Stilizarea prețului total
    • Stilurile CSS personalizate sunt adăugate pentru a evidenția prețul total.

Rezultat

După implementarea acestui cod, utilizatorii vor vedea prețul total al rolei calculat automat, atât pe pagina produsului, cât și în coșul de cumpărături.

Concluzie

Această funcționalitate este ideală pentru magazinele care vând produse la rolă, cum ar fi textile, materiale plastice sau cabluri. Implementarea este simplă și îmbunătățește claritatea informațiilor pentru clienți.

 

× YouTube Logo

🔔 Abonează-te la canalul nostru!

Primește cele mai noi tutoriale WordPress direct pe YouTube!

×