Woocommerce: как получить статус вариаций на складе - PullRequest
0 голосов
/ 07 мая 2020

У меня есть эта функция, чтобы немного персонализировать страницу моего продукта. Внутри моей функции дочерних тем. php Я добавил это:

function change_product_summary_germanized(){
    global $product;

    if ($product->is_type('variable')) {

        $shopmarks = wc_gzd_get_single_product_shopmarks();

        foreach ($shopmarks as $shopmark) {
            $type = $shopmark->get_type();
            switch ($type) {
                case 'unit_price':
                    $shopmark->remove();
                    add_action('woocommerce_before_single_variation', 'woocommerce_gzd_template_single_price_unit', 20);
                    add_action('woocommerce_before_single_variation', 'custom_unit_price_title', 19);
                    break;
                case 'legal':
                    $shopmark->remove();
                    add_action('woocommerce_before_single_variation', 'woocommerce_gzd_template_single_legal_info', 40);
                    break;
                case 'delivery_time':
                    $shopmark->remove();
                    // if ( $product->is_in_stock() ) {
                        add_action('woocommerce_before_single_variation', 'woocommerce_gzd_template_single_delivery_time_info', 50);
                    // }
                    break;

            }
        }
    }
}
add_filter('woocommerce_single_product_summary', 'change_product_summary_germanized');

Работает нормально, но, как вы можете видеть, я закомментировал предложение if, с которым у меня возникли проблемы. Я перепробовал разные способы, чтобы не добавлять время доставки, когда выбранного варианта нет в наличии.

Примеры того, что я пробовал до сих пор:

if( $product->is_in_stock() ) {...}
if( $product->get_stock_quantity() > 0 ) {...}
if( sizeof($product->get_available_variations()) > 0) {...}

...

Я новичок в этом. Кто-нибудь может указать мне, как сюда попасть go?

1 Ответ

0 голосов
/ 16 июня 2020

Многие согласятся, что это ужасная работа, но я добился того, чего хотел, сложным путем. Несколько месяцев go я построил функцию для получения цен на продукты своим собственным способом. Он основан на том, что я нашел в Интернете, но я больше не могу найти ссылку. В любом случае, я добавил несколько JQuery, чтобы скрыть / показать элементы в зависимости от того, видны ли другие элементы.

function custom_wc_template_single_price(){
global $product;
if ($product->is_type('variable')):
    $prices = array(
        $product->get_variation_price('min', true),
        $product->get_variation_price('max', true)
    );
    $price = $prices[0] !== $prices[1] ? sprintf(__('ab %1$s', 'woocommerce'), wc_price($prices[0])) : wc_price($prices[0]);
    $prices = array(
        $product->get_variation_regular_price('min', true),
        $product->get_variation_regular_price('max', true)
    );
    sort($prices);
    $saleprice = $prices[0] !== $prices[1] ? sprintf(__('ab %1$s', 'woocommerce'), wc_price($prices[0])) : wc_price($prices[0]);

    if ($price !== $saleprice && $product->is_on_sale()) {
        $price = '<del>' . $saleprice . $product->get_price_suffix() . '</del> <ins>' . $price . $product->get_price_suffix() . '</ins>';
    }

    ?>
    <style>
        div.woocommerce-variation-price,
        div.woocommerce-variation-availability,
        div.hidden-variable-price {
            height: 0px !important;
            overflow: hidden;
            position: relative;
            line-height: 0px !important;
            font-size: 0% !important;
            visibility: hidden !important;
        }

        p.price {
            margin-bottom: 12px;
        }

        p.availability {
            margin-bottom: 4px;
        }
    </style>
    <script>
        jQuery(document).ready(function ($) {
            setTimeout(function () {
                if (0 < $('input.variation_id').val() && null != $('input.variation_id').val()) {
                    if ($('p.availability'))
                        $('p.availability').remove();

                    $('p.price:not(.price-unit)').html($('div.woocommerce-variation-price > span.price').html());
                    if ($('div.legal-price-info > p.stock').length === 0) {
                        $('div.legal-price-info').append('<p class="availability">' + $('div.woocommerce-variation-availability').html() + '</p>');
                    }
                }
            }, 300);
            $('input').blur(function () {
                if (0 < $('input.variation_id').val() && null != $('input.variation_id').val()) {

                    if ($('.price p.availability') || $('.price p.stock'))
                        $('p.price:not(.price-unit) p').each(function () {
                            $(this).remove();
                        });

                    if ($('div.legal-price-info > p.availability'))
                        $('div.legal-price-info > p:not(.wc-gzd-additional-info)').remove();

                    $('p.price:not(.price-unit)').html($('div.woocommerce-variation-price > span.price').html());

                    $('div.legal-price-info').append('<p class="availability">' + $('div.woocommerce-variation-availability').html() + '</p>');

                    if ($('div.legal-price-info > p.stock').length !== 0) {
                        $('p.delivery-time-info').hide();
                        $('div.woocommerce-variation-add-to-cart').hide();
                    } else {
                        $('p.delivery-time-info').show();
                        $('div.woocommerce-variation-add-to-cart').show();
                    }
                } else {
                    $('p.price:not(.price-unit)').html($('div.hidden-variable-price').html());
                    if ($('p.availability'))
                        $('p.availability').remove();
                }
            })
        });

    </script>
    <?php
    echo '<p class="price">' . $price . '</p>
    <div class="hidden-variable-price" >' . $price . '</div>';
endif;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...