Star kortärmad pikétröja för herr

Artikelnummer: R6638
Vit
Svart
Gul
Kungsblå
Sand
Himmelsblå
Turkos
Venture grön
Mörk mint
Tropisk grön
Riviera blå
Krysantemröd
Zen blå
Dimgrön
Ler orange
Orange
Mörkbly
Ljusrosa
Marinblå
Buteljgrön
Granat
Marlgrå
Röd
Lila
Rosett
Gräsgrön
Denimblå
Choklad
Mintgrön
Blek röd
Bärröd
Stormblå
Lugn blå
XS
Volym50+100+250+1000+
Pris / st111 kr111 kr109 kr109 kr
Märkning tillkommer.
<?php
function generate_custom_product_table() {
    global $product;

    if ( !$product || !$product->is_type( 'variable' ) ) {
        return; // Only run on variable products
    }

    $available_variations = $product->get_available_variations();
    $attributes = $product->get_attributes();

    $color_info = [];
    $size_info = [];
    $variations_data = [];
    $empty_prices = [];
    $price_bar = null;

    // Fetch attributes for colors and sizes
    if ( isset($attributes['pa_color']) ) {
        $attribute_color = $attributes['pa_color'];
        $attributes_color = wc_get_product_terms($product->get_id(), $attribute_color->get_name(), ['fields' => 'all']);
    }

    if ( isset($attributes['pa_size']) ) {
        $attribute_size = $attributes['pa_size'];
        $attributes_size = wc_get_product_terms($product->get_id(), $attribute_size->get_name(), ['fields' => 'all']);
    }

    // Process each variation
    foreach ( $available_variations as $variation ) {
        $variable_product = wc_get_product( $variation['variation_id'] );
        $price_1 = $variable_product->get_regular_price();
        $prices = get_post_meta( $variation['variation_id'], '_tiered_prices', true );
        $variation_main_image = get_post_meta($variation['variation_id'], '_external_variation_main_image', true);
        $gallery_image_filenames = get_post_meta($variation['variation_id'], '_external_variation_gallery_images', true);
        $hexadecimal = get_post_meta($variation['variation_id'], '_variation_color_hexadecimal', true);

        if (!is_array($prices) || empty($prices)) {
            $empty_prices[] = count($variations_data);
            $price_bar = $prices;
        }

        // Ensure gallery images array
        if (!is_array($gallery_image_filenames)) {
            $gallery_image_filenames = [];
        }
        array_unshift($gallery_image_filenames, $variation_main_image);

        // Process color info
        $color_slug = $variation['attributes']['attribute_pa_color'];
        $color_name = '';
        foreach ($attributes_color as $attribute) {
            if ($attribute->slug == $color_slug) {
                $color_name = $attribute->name;
                break;
            }
        }

        $color_info[] = [
            "name" => $color_name,
            "slug" => $color_slug,
            "hexadecimal" => $hexadecimal,
        ];

        // Process size info if available
        $size_slug = $variation['attributes']['attribute_pa_size'] ?? null;
        if ($size_slug) {
            $size_name = '';
            foreach ($attributes_size as $attribute) {
                if ($attribute->slug == $size_slug) {
                    $size_name = $attribute->name;
                    break;
                }
            }

            $size_info[] = [
                "name" => $size_name,
                "slug" => $size_slug,
            ];
        }

        // Format prices
        $formatted_prices = is_array($prices) ? array_map(function($price) {
            return number_format($price, 2, ',', ' ') . ' kr';
        }, $prices) : 0;

        $variations_data[] = [
            'variation_id' => $variation['variation_id'],
            'color_slug' => $color_slug,
            'size_slug' => $size_slug,
            'prices' => $formatted_prices,
            'color_info' => $color_info,
            'size_info' => $size_info,
            'gallery_image_urls' => $gallery_image_filenames,
            'sku' => $variation['sku']
        ];
    }

    // Filter unique colors and sizes
    $unique_colors = array_values(array_unique($color_info, SORT_REGULAR));
    $unique_sizes = array_values(array_unique($size_info, SORT_REGULAR));



    // Start output buffering to capture the HTML
    ob_start();
    ?>

    <form id="data-form" data-product-id="<?php echo esc_attr($product->get_id()); ?>" data-price-volume='<?php echo esc_attr(wp_json_encode($variations_data)); ?>' data-base-url="<?php echo esc_attr(BASE_URL); ?>"></form>
<div class="square-container">
        <?php foreach ($unique_colors as $color): ?>
            <div class="square color" style="background-color: #<?php echo esc_attr($color['hexadecimal'][0]); ?>;" data-value="<?php echo esc_attr($color['slug']); ?>">
                <div class="tooltip"><?php echo esc_html($color['name']); ?></div>
            </div>
        <?php endforeach; ?>
    </div>
    <?php if (!empty($unique_sizes)): ?>
    <div class="square-container color-container">
        
            <?php 
            $xtraText = "";
            foreach ($unique_sizes as $size): 
                if (strpos($size["name"], "pages") !== false) {
                // Remove "pages" from the string
                $text = str_replace("pages", "", $size["name"]);
                $text = trim($text);
                $xtraText = "Pages";
            }else{

                 $text = $size["name"];
                 
            }?>
                <div class="square size" data-value="<?php echo esc_attr($size['slug']); ?>"><?php echo esc_html($text); ?></div>
            <?php endforeach; 
            if($xtraText){ ?>
                <div><?php echo $xtraText ; ?></div>
            <?php 
            } ?>
       
    </div>
    <?php endif; ?>
    <table class="table custom-table price-table">
        <tr class="tr row-volume">
            <td class="td number-cell">Volym</td>
            <?php foreach ($variations_data[0]['prices'] as $volume => $price): ?>
                <td class="th number-cell"><?php echo esc_html($volume); ?>+</td>
            <?php endforeach; ?>
        </tr>
        <tr class="tr row-price">
            <td class="td">Pris / st</td>
            <?php foreach ($variations_data[0]['prices'] as $volume => $price): ?>
                <td class="td"><?php echo esc_html($price); ?></td>
            <?php endforeach; ?>
        </tr>
    </table>

    <style>
        .table { border-collapse: collapse; width: auto; margin: 10px 0; }
        .td, .th { padding: 10px; }
        .th { border-bottom: 1px solid gray; }
        
        .tooltip { display: none; position: absolute; bottom: 100%; left: 50%; transform: translateX(-50%); background: black; color: white; padding: 5px; border-radius: 3px; white-space: nowrap; }
        .square:hover .tooltip { display: block; }
    </style>

    <?php
    // Return the captured HTML
    return ob_get_clean();
}

// Use in a Bricks code block like this:
echo generate_custom_product_table();
?>

Liknande produkter

Onyx Aware™ 5-panelskeps av återvunnet material

50.00 kr
Lägg till i offertförfrågan Den här produkten har flera varianter. De olika alternativen kan väljas på produktsidan

Epidote dunväst av återvunna GRS-material herr

644.50 kr
Lägg till i offertförfrågan Den här produkten har flera varianter. De olika alternativen kan väljas på produktsidan

Howson solhatt av återvunnen manchester

69.00 kr
Lägg till i offertförfrågan Den här produkten har flera varianter. De olika alternativen kan väljas på produktsidan

Level mössa

56.50 kr
Lägg till i offertförfrågan Den här produkten har flera varianter. De olika alternativen kan väljas på produktsidan

Irwin mössa

33.50 kr
Lägg till i offertförfrågan Den här produkten har flera varianter. De olika alternativen kan väljas på produktsidan