Adăugare câmp cantitate pentru fiecare produs în pagina de magazin WooCommerce

10 dec. 2013, 13:19:46
Vizualizări: 31.7K
Voturi: 0

Vreau să adaug un câmp de cantitate pentru fiecare produs în pagina de magazin. Am folosit

<input type="number" step="1" min="1" name="quantity" value="" title="Cantitate" class="input-text qty text"/>

codul în woocommerce/templates/loop/add-to-cart.php

Dar nu reușește să adauge cantitatea în momentul trimiterii. Vă rog să-mi oferiți orice sugestie. Mulțumesc anticipat

0
Toate răspunsurile la întrebare 3
0

Dacă preferați să faceți aceasta cu ajax, puteți proceda astfel:

Creați un fișier wp-content/themes/your-theme/templates/loop/add-to-cart.php cu următorul conținut:

<?php
/**
 * Personalizare Adăugare în Coș în Buclă.
 *
 * Șablon cu cantitate și ajax.
 */

if ( ! defined( 'ABSPATH' ) ) exit; // Ieșire dacă este accesat direct.

global $product;
?>

<?php if ( ! $product->is_in_stock() ) : ?>

    <a href="<?php echo apply_filters( 'out_of_stock_add_to_cart_url', get_permalink( $product->id ) ); ?>" class="button"><?php echo apply_filters( 'out_of_stock_add_to_cart_text', __( 'Citește mai mult', 'woocommerce' ) ); ?></a>

<?php else : ?>

    <?php
        $link = array(
            'url'   => '',
            'label' => '',
            'class' => ''
        );

        switch ( $product->product_type ) {
            case "variable" :
                $link['url']    = apply_filters( 'variable_add_to_cart_url', get_permalink( $product->id ) );
                $link['label']  = apply_filters( 'variable_add_to_cart_text', __( 'Selectează opțiuni', 'woocommerce' ) );
            break;
            case "grouped" :
                $link['url']    = apply_filters( 'grouped_add_to_cart_url', get_permalink( $product->id ) );
                $link['label']  = apply_filters( 'grouped_add_to_cart_text', __( 'Vezi opțiuni', 'woocommerce' ) );
            break;
            case "external" :
                $link['url']    = apply_filters( 'external_add_to_cart_url', get_permalink( $product->id ) );
                $link['label']  = apply_filters( 'external_add_to_cart_text', __( 'Citește mai mult', 'woocommerce' ) );
            break;
            default :
                if ( $product->is_purchasable() ) {
                    $link['url']    = apply_filters( 'add_to_cart_url', esc_url( $product->add_to_cart_url() ) );
                    $link['label']  = apply_filters( 'add_to_cart_text', __( 'Adaugă în coș', 'woocommerce' ) );
                    $link['class']  = apply_filters( 'add_to_cart_class', 'add_to_cart_button' );
                } else {
                    $link['url']    = apply_filters( 'not_purchasable_url', get_permalink( $product->id ) );
                    $link['label']  = apply_filters( 'not_purchasable_text', __( 'Citește mai mult', 'woocommerce' ) );
                }
            break;
        }

        // Dacă este un produs simplu.
        if ( $product->product_type == 'simple' ) {
            ?>
            <form action="<?php echo esc_url( $product->add_to_cart_url() ); ?>" class="cart" method="post" enctype="multipart/form-data">
                <?php
                    // Afișează caseta de cantitate.
                    woocommerce_quantity_input();

                    // Afișează butonul de trimitere.
                    echo sprintf( '<button type="submit" data-product_id="%s" data-product_sku="%s" data-quantity="1" class="%s button product_type_simple">%s</button>', esc_attr( $product->id ), esc_attr( $product->get_sku() ), esc_attr( $link['class'] ), esc_html( $link['label'] ) );
                ?>
            </form>
            <?php
        } else {
          echo apply_filters( 'woocommerce_loop_add_to_cart_link', sprintf('<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" class="%s button product_type_%s">%s</a>', esc_url( $link['url'] ), esc_attr( $product->id ), esc_attr( $product->get_sku() ), esc_attr( $link['class'] ), esc_attr( $product->product_type ), esc_html( $link['label'] ) ), $product, $link );
        }

    ?>

<?php endif; ?>

Iar în fișierul functions.php al temei, adăugați:

function cs_wc_loop_add_to_cart_scripts() {
    if ( is_shop() || is_product_category() || is_product_tag() || is_product() ) : ?>

<script>
    jQuery(document).ready(function($) {
        $(document).on( 'change', '.quantity .qty', function() {
            $(this).parent('.quantity').next('.add_to_cart_button').attr('data-quantity', $(this).val());
        });
    });
</script>

    <?php endif;
}

add_action( 'wp_footer', 'cs_wc_loop_add_to_cart_scripts' );
11 dec. 2013 20:05:18
0

Iată cum am modificat fișierul meu loop/add-to-cart.php pentru a realiza acest lucru:

<?php
/**
 * Loop Add to Cart
 *
 * @author      WooThemes
 * @package     WooCommerce/Templates
 * @version     1.6.4
 */

if ( ! defined( 'ABSPATH' ) ) exit; // Ieșire dacă este accesat direct

global $product;
?>

<?php if ( ! $product->is_in_stock() ) : ?>

    <a href="<?php echo apply_filters( 'out_of_stock_add_to_cart_url', get_permalink( $product->id ) ); ?>" class="button"><?php echo apply_filters( 'out_of_stock_add_to_cart_text', __( 'Citește mai mult', 'woocommerce' ) ); ?></a>

<?php else : ?>

    <?php
        $link = array(
            'url'   => '',
            'label' => '',
            'class' => ''
        );

        $handler = apply_filters( 'woocommerce_add_to_cart_handler', $product->product_type, $product );

        switch ( $handler ) {
            case "variable" :
                $link['url']    = apply_filters( 'variable_add_to_cart_url', get_permalink( $product->id ) );
                $link['label']  = apply_filters( 'variable_add_to_cart_text', __( 'Selectează opțiuni', 'woocommerce' ) );
            break;
            case "grouped" :
                $link['url']    = apply_filters( 'grouped_add_to_cart_url', get_permalink( $product->id ) );
                $link['label']  = apply_filters( 'grouped_add_to_cart_text', __( 'Vezi opțiuni', 'woocommerce' ) );
            break;
            case "external" :
                $link['url']    = apply_filters( 'external_add_to_cart_url', get_permalink( $product->id ) );
                $link['label']  = apply_filters( 'external_add_to_cart_text', __( 'Citește mai mult', 'woocommerce' ) );
            break;
            default :
                if ( $product->is_purchasable() ) {
                    $link['url']    = apply_filters( 'add_to_cart_url', esc_url( $product->add_to_cart_url() ) );
                    $link['label']  = apply_filters( 'add_to_cart_text', __( 'Adaugă în coș', 'woocommerce' ) );
                    $link['class']  = apply_filters( 'add_to_cart_class', 'add_to_cart_button' );
                } else {
                    $link['url']    = apply_filters( 'not_purchasable_url', get_permalink( $product->id ) );
                    $link['label']  = apply_filters( 'not_purchasable_text', __( 'Citește mai mult', 'woocommerce' ) );
                }
            break;
        }
        if ( $product->product_type == 'simple' ) {

            ?>
            <form action="<?php echo esc_url( $product->add_to_cart_url() ); ?>" class="cart" method="post" enctype='multipart/form-data'>

                <?php woocommerce_quantity_input(); ?>

                <button type="submit" class="button alt"><?php echo $label; ?></button>

            </form>
            <?php

        } else {
            echo apply_filters( 'woocommerce_loop_add_to_cart_link', sprintf('<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" class="%s button product_type_%s">%s</a>', esc_url( $link['url'] ), esc_attr( $product->id ), esc_attr( $product->get_sku() ), esc_attr( $link['class'] ), esc_attr( $product->product_type ), esc_html( $link['label'] ) ), $product, $link );
        }
    ?>

<?php endif; ?>

Notă: acest lucru este valabil doar pentru produsele simple.

10 dec. 2013 15:49:18
0

Interceptează butonul de adăugare în coș și înlocuiește-l cu cel folosit pe pagina de produs individual.

/**
* începe personalizarea
*/
add_action('woocommerce_before_shop_loop', function() {
    add_filter('woocommerce_loop_add_to_cart_link', 'wpse_125946_add_to_cart', 10, 3);
});

/**
* personalizează link-ul/butonul Adaugă în coș pentru bucla de produse
* @param string $button
* @param object $product
* @param array $link
* @return string
*/
function wpse_125946_add_to_cart($button, $product, $link) {
    // nu pentru produse variabile, grupate sau externe
    if (!in_array($product->product_type, array('variable', 'grouped', 'external'))) {
        // doar dacă poate fi cumpărat
        if ($product->is_purchasable()) {
            // afișează cantitate +/- cu buton
            ob_start();
            woocommerce_simple_add_to_cart();
            $button = ob_get_clean();
        }
    }

    return $button;
}

Și mai bine, fă asta și suportă adăugarea în coș cu AJAX -- cod disponibil în acest gist.

11 dec. 2013 23:41:17