Woocommerce - Как условно изменить текст кнопки на странице с изменяемым товаром? - PullRequest
1 голос
/ 31 марта 2020

Я провел весь день, пытаясь понять, как я могу установить условную кнопку для моих переменных продуктов на основе запаса. Я следовал и искал все советы, обсуждения и т. Д. c ... Но ничего не подходит.

Идея такова:

  1. , если вариант не выбран : Выберите свой стиль
  2. если вариация доступна : добавить в корзину
  3. если вариация нет доступно или нет в наличии: отключите кнопку «добавить в корзину» и измените текст на «продано»
  4. , если все варианты нет в наличии : отключить «добавить в корзину "и измените текст на" продано "

Я пробовал разные фрагменты, я довольно новичок ... Я также пытался динамически изменять текст внутри кнопки с помощью jQuery, потому что я иметь следующий класс: wc-variation-is-unavailable, когда вариации нет в наличии .. Мне удалось сделать кнопку серой: D Но она по-прежнему кликабельна ..

Это последний фрагмент, который я пробовал, но он изменяет метку кнопки для всех вариантов: /

    function ace_custom_change_singe_add_to_cart_text( $text, $product ) {
    global $product;
    $text = __( 'Add to basket' );
    $stock = $product->get_stock_quantity();

    if ( $product->is_type( 'variable' )) {
        if ($stock > 1) {
            $text = __( 'Pick your style' );
        }
        elseif ($stock == 0) {
            $text = __( 'Sold Out' );
        }
    }   

    if ( $product->is_type( 'grouped' )) {
        $text = __( 'View components' );
    }


    // Set a button text for a specific category
    $category = get_term_by( 'slug', 'wine', 'product_cat' );
    if ( $category && in_array( $category->term_id, $product->get_category_ids() ) ) {
        $text = __( 'Pick this bottle' );
    }

    return $text; 
} 
add_filter( 'woocommerce_product_single_add_to_cart_text', 'ace_custom_change_singe_add_to_cart_text', 10, 2 );

Это моя переменная. php file:

<?php do_action( 'woocommerce_before_add_to_cart_button' ); ?>

        <div class="single_variation_wrap">
            <?php

                do_action( 'woocommerce_before_single_variation' );
                do_action( 'woocommerce_single_variation' );
                ?>

                <div class="variations_button">

                    <?php if (StockieSettings::get('woocommerce_add_to_cart_ajax', 'global')) { ?>
                    <a id="dyId" class="single_add_to_cart_button btn alt btn-loading-disabled">
                        <i class="icon ion ion-left">
                            <svg version="1.1"  xmlns="http://www.w3.org/2000/svg" width="12px" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 12 16" xml:space="preserve">
                            <path class="st0" d="M9,4V3c0-1.7-1.3-3-3-3S3,1.3,3,3v1H0v10c0,1.1,0.9,2,2,2h8c1.1,0,2-0.9,2-2V4H9z M4,3c0-1.1,0.9-2,2-2
                                s2,0.9,2,2v1H4V3z"/>
                            </svg>
                        </i>
                        <?php echo (esc_html( $product->single_add_to_cart_text()) ); ?>
                    </a>
                <?php } else { ?>
                    <button type="submit" class="single_add_to_cart_button btn alt btn-loading-disabled">

                        <i class="icon ion ion-left">
                            <svg version="1.1"  xmlns="http://www.w3.org/2000/svg" width="12px" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 12 16" xml:space="preserve">
                            <path class="st0" d="M9,4V3c0-1.7-1.3-3-3-3S3,1.3,3,3v1H0v10c0,1.1,0.9,2,2,2h8c1.1,0,2-0.9,2-2V4H9z M4,3c0-1.1,0.9-2,2-2
                                s2,0.9,2,2v1H4V3z"/>
                            </svg>
                        </i>
                        <?php echo esc_html( $product->single_add_to_cart_text() ); ?>
                    </button>
                <?php } ?>
                </div>
                <input type="hidden" name="add-to-cart" value="<?php echo esc_attr( $product->get_id() ); ?>" />
                <input type="hidden" name="product_id" value="<?php echo esc_attr( $post->ID ); ?>" />
                <input type="hidden" name="variation_id" class="variation_id" value="" />

                <?php do_action( 'woocommerce_after_single_variation' ); ?>
                </div>

Если кто-то может помочь, я буду очень благодарен.

...