Modifying WooThemes 'Min / Max Qty' plugin

2019-07-26 02:26发布

I'm needing some assistance in getting the following to work:

I'm creating a e-commerce site using the Wordpress plugin Woocommerce and have a number of products with variations which appear in a grid format. As you may know the default Woocommerce way of showing variations is using dropdown menus which isn't pratical for the market of users i'm targeting. Instead, i found a snippet of code from www.eggplantstudios.ca/woocommerce-product-variation-add-cart-grid/ which changes the display of the variations to display in a grid format each with their own 'Add to cart' button.

This works great.

However, my next challenge was to find something which would set a minimum quantity limit order for the separate variations. I researched and found a plugin offered by WooThemes 'Min / max qty'. I installed and setup the plugin using the documentation, set the limits in the backend and i was ready to go.

Unfortunately, this plugin hasn't worked and is displaying an error message regardless of how many i order. See link here

My first step was to contact Woothemes and ask what might be causing the problem. They came back to me with steps to identify the problem and told me to change the theme to the default Wordpress one. Did this and it worked.

So my guess is the code i added from www.eggplantstudios.ca/woocommerce-product-variation-add-cart-grid/ is conflicting with the plugin... :(((

Now with little experience in Php i'm not sure how to progress this to get it working. I really want to keep the grid as it is as i think this such a better way of displaying the variations.

Can anyone point me to where the problem might be caused? Is it a simple fix?

I appreciate any help :)

Thanks

Code from my functions.php file:

function woocommerce_variable_add_to_cart(){
    global $product, $post;

    $variations = find_valid_variations();

    // Check if the special 'price_grid' meta is set, if it is, load the default template:
    if ( get_post_meta($post->ID, 'price_grid', true) ) {
        // Enqueue variation scripts
        wp_enqueue_script( 'wc-add-to-cart-variation' );

        // Load the template
        wc_get_template( 'single-product/add-to-cart/variable.php', array(
                'available_variations'  => $product->get_available_variations(),
                'attributes'            => $product->get_variation_attributes(),
                'selected_attributes'   => $product->get_variation_default_attributes()
            ) );
        return;
    }

    // Cool, lets do our own template!
    ?>





    <table class="variations variations-grid" cellspacing="0">
        <thead>
            <tr>
                <th>Container Size</th>
                <th>Height</th> 
                <th>Description</th>
                <th>Quantity</th>
            </tr>
        </thead>
        <tbody>


 <?php
            foreach ($variations as $key => $value) {
                if( !$value['variation_is_visible'] ) continue;
            ?>   
            <tr>
                    <?php foreach($value['attributes'] as $key => $val ) {
                        $val = str_replace(array('','_'), ' ', $val);
                        printf( '<td class="attr attr-%s">%s</td>  ', $key, ucwords($val) );
                    } 

                    ?>
                   <td class="variation-description">
                   <?php $desc = $value['variation_description'] ?>

                   <?php if($desc) { ?>

                        <?php echo $desc ?>

                    <?php  }?>

               </td>
<td> <?php woocommerce_quantity_input(); ?></td>
                <td>
                    <?php echo $value['price_html'];?>
                </td>
                <td>
                    <?php if( $value['is_in_stock'] ) { ?>
                    <form class="cart" action="<?php echo esc_url( $product->add_to_cart_url() ); ?>" method="post" enctype='multipart/form-data'>

                        <?php
                        if(!empty($value['attributes'])){
                            foreach ($value['attributes'] as $attr_key => $attr_value) {
                            ?>
                            <input type="hidden" name="<?php echo $attr_key?>" value="<?php echo $attr_value?>">
                            <?php
                            }
                        }
                        ?>
                        <button type="submit" class="single_add_to_cart_button btn btn-primary"><span class="glyphicon glyphicon-tag"></span> Add to cart</button>
                        <input type="hidden" name="variation_id" value="<?php echo $value['variation_id']?>" />
                        <input type="hidden" name="product_id" value="<?php echo esc_attr( $post->ID ); ?>" />
                        <input type="hidden" name="add-to-cart" value="<?php echo esc_attr( $post->ID ); ?>" />

                    </form>

                    <?php } else { ?>
                        <p class="stock out-of-stock"><?php _e( 'This product is currently out of stock and unavailable.', 'woocommerce' ); ?></p>
                    <?php } ?>
                </td>
            </tr>
            <?php } ?>
        </tbody>
    </table>
    <?php
}

function find_valid_variations() {
    global $product;

    $variations = $product->get_available_variations();
    $attributes = $product->get_attributes();
    $new_variants = array();

    // Loop through all variations
    foreach( $variations as $variation ) {

        // Peruse the attributes.

        // 1. If both are explicitly set, this is a valid variation
        // 2. If one is not set, that means any, and we must 'create' the rest.

        $valid = true; // so far
        foreach( $attributes as $slug => $args ) {
            if( array_key_exists("attribute_$slug", $variation['attributes']) && !empty($variation['attributes']["attribute_$slug"]) ) {
                // Exists

            } else {
                // Not exists, create
                $valid = false; // it contains 'anys'
                // loop through all options for the 'ANY' attribute, and add each
                foreach( explode( '|', $attributes[$slug]['value']) as $attribute ) {
                    $attribute = trim( $attribute );
                    $new_variant = $variation;
                    $new_variant['attributes']["attribute_$slug"] = $attribute;
                    $new_variants[] = $new_variant;
                }

            }
        }

        // This contains ALL set attributes, and is itself a 'valid' variation.
        if( $valid )
            $new_variants[] = $variation;

    }

    return $new_variants;
} 

0条回答
登录 后发表回答