Замените поле количества на форму, если товара нет в наличии в Woocommerce. - PullRequest
1 голос
/ 31 марта 2019

В woocommerce, используя плагин для контактной формы 7 , я пытаюсь заменить поле количества товара в сводке товара формой, когда товара нет в наличии.

Он отлично работает с переменными продуктами, но для простых продуктов он по-прежнему показывает форму и поле количества.

Такое ощущение, что я пропускаю что-то очень простое.

Я заменил различные echo на «простые» и «переменные», чтобы выяснить, какая форма показана, , но на простых продуктах она по-прежнему показывает «переменную» форму .

Вот мой код:

add_action( 'woocommerce_single_product_summary', 'add_form' );
function add_form() {
    global $product;

    if( $product->is_type( 'simple' ) ){
        // a simple product
        if(!$product->is_in_stock( )) {
            echo do_shortcode('[contact-form-7 id="304" title="Contact stock"]');
            //echo "simple";
        }
    } elseif( $product->is_type( 'variable' ) ){
        // a variable product
        $count_in_stock == 0;
        $variation_ids = $product->get_children(); // Get product variation IDs

        foreach( $variation_ids as $variation_id ){
            $variation = wc_get_product($variation_id);
            if( $variation->is_in_stock() )
                $count_in_stock++;
        }   
    }

    if( $count_in_stock == 0 ) {
        echo do_shortcode('[contact-form-7 id="304" title="Contact stock"]');
        //echo "variable";
    }   
}

1 Ответ

0 голосов
/ 31 марта 2019

Попробуйте следующий код, который заменит поле количества и добавит в корзину кнопку с формой, когда товара "нет в наличии" (для всех типов товаров, включая переменные товары) .

Вы говорите "для простых продуктов все равно отображается форма" переменной "* : это потому, что вы используете один и тот же шорткод как для простых, так и для переменных продуктов. Так что вам нужно будет добавить правильный шорткод для простых продуктов.

код:

add_action( 'woocommerce_single_product_summary', 'action_single_product_summary_callback', 4 );
function action_single_product_summary_callback() {
    global $product;

    // Variable products
    if ( $product->is_type( 'variable' ) ){
        $count_in_stock = 0;

        foreach ( $product->get_visible_children() as $variation_id ) {
            $variation = wc_get_product($variation_id);

            if( $variation->is_in_stock() ) {
                $count_in_stock++;
            }
        }
        if ( $count_in_stock === 0 ) {
            // Remove quantity field and add to cart button
            remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 );
            // Display the contact form
            add_action( 'woocommerce_single_variation', 'display_variable_product_out_of_stock_form', 20 );
        }
    }
    // Other products (Simple … )
    else {
        if ( ! $product->is_in_stock() ) {
            // Remove quantity field and add to cart button
            remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
            // Display the contact form
            add_action( 'woocommerce_single_product_summary', 'display_simple_product_out_of_stock_form', 30 );
        }
    }
}

// Form for variable products
function display_variable_product_out_of_stock_form() {
    echo do_shortcode('[contact-form-7 id="304" title="Contact stock"]');
}

// Form for Simple products
function display_simple_product_out_of_stock_form() {
    echo do_shortcode('[contact-form-7 id="304" title="Contact stock"]'); // <== NOT the correct shortcode
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...