Last active
January 17, 2018 10:24
-
-
Save damiencarbery/3f26646a4f1a4ed342e667bf2c6455ab to your computer and use it in GitHub Desktop.
Change WooCommerce variations layout https://www.damiencarbery.com/2017/11/change-woocommerce-variations-layout/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Variable product add to cart | |
* | |
* This template can be overridden by copying it to yourtheme/woocommerce/single-product/add-to-cart/variable.php. | |
* | |
* HOWEVER, on occasion WooCommerce will need to update template files and you | |
* (the theme developer) will need to copy the new files to your theme to | |
* maintain compatibility. We try to do this as little as possible, but it does | |
* happen. When this occurs the version of the template file will be bumped and | |
* the readme will list any important changes. | |
* | |
* @see https://docs.woocommerce.com/document/template-structure/ | |
* @author WooThemes | |
* @package WooCommerce/Templates | |
* @version 2.5.0 | |
*/ | |
if ( ! defined( 'ABSPATH' ) ) { | |
exit; | |
} | |
global $product; | |
$attribute_keys = array_keys( $attributes ); | |
do_action( 'woocommerce_before_add_to_cart_form' ); ?> | |
<form class="variations_form cart" method="post" enctype='multipart/form-data' data-product_id="<?php echo absint( $product->id ); ?>" data-product_variations="<?php echo htmlspecialchars( json_encode( $available_variations ) ) ?>"> | |
<?php do_action( 'woocommerce_before_variations_form' ); ?> | |
<?php if ( empty( $available_variations ) && false !== $available_variations ) : ?> | |
<p class="stock out-of-stock"><?php _e( 'This product is currently out of stock and unavailable.', 'woocommerce' ); ?></p> | |
<?php else : ?> | |
<table class="variations" cellspacing="0"> | |
<tbody> | |
<?php $labels = $values = ''; ?> | |
<?php foreach ( $attributes as $attribute_name => $options ) : ?> | |
<!--<tr>--> | |
<?php ob_start(); ?> | |
<td class="label"><label for="<?php echo sanitize_title( $attribute_name ); ?>"><?php echo wc_attribute_label( $attribute_name ); ?></label><?php if (( class_exists('YITH_WCPSC_Frontend_Premium') ) && ('Size' == wc_attribute_label( $attribute_name ))) { YITH_WCPSC_Frontend_Premium::get_instance()->print_button(); } ?></td> | |
<?php $labels .= ob_get_contents(); ob_end_clean(); ?> | |
<?php ob_start(); ?> | |
<td class="value"> | |
<?php | |
$selected = isset( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ? wc_clean( urldecode( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ) : $product->get_variation_default_attribute( $attribute_name ); | |
wc_dropdown_variation_attribute_options( array( 'options' => $options, 'attribute' => $attribute_name, 'product' => $product, 'selected' => $selected ) ); | |
echo end( $attribute_keys ) === $attribute_name ? apply_filters( 'woocommerce_reset_variations_link', '<a class="reset_variations" href="#">' . __( 'Clear', 'woocommerce' ) . '</a>' ) : ''; | |
?> | |
</td> | |
<?php $values .= ob_get_contents(); ob_end_clean(); ?> | |
<!--</tr>--> | |
<?php endforeach;?> | |
<?php echo '<tr>', $labels, '<td>Qty</td>', '</tr><tr>', $values, '<td>', woocommerce_quantity_input( array( 'input_value' => isset( $_POST['quantity'] ) ? wc_stock_amount( $_POST['quantity'] ) : 1 ) ), '</td>', '</tr>'; ?> | |
</tbody> | |
</table> | |
<?php do_action( 'woocommerce_before_add_to_cart_button' ); ?> | |
<div class="single_variation_wrap"> | |
<?php | |
/** | |
* woocommerce_before_single_variation Hook. | |
*/ | |
do_action( 'woocommerce_before_single_variation' ); | |
/** | |
* woocommerce_single_variation hook. Used to output the cart button and placeholder for variation data. | |
* @since 2.4.0 | |
* @hooked woocommerce_single_variation - 10 Empty div for variation data. | |
* @hooked woocommerce_single_variation_add_to_cart_button - 20 Qty and cart button. | |
*/ | |
do_action( 'woocommerce_single_variation' ); | |
/** | |
* woocommerce_after_single_variation Hook. | |
*/ | |
do_action( 'woocommerce_after_single_variation' ); | |
?> | |
</div> | |
<?php do_action( 'woocommerce_after_add_to_cart_button' ); ?> | |
<?php endif; ?> | |
<?php do_action( 'woocommerce_after_variations_form' ); ?> | |
</form> | |
<?php | |
do_action( 'woocommerce_after_add_to_cart_form' ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- variable.php 2017-01-18 17:27:34.000000000 +0000 | |
+++ variable.new.php 2017-11-05 22:11:51.902289800 +0000 | |
@@ -33,9 +33,13 @@ | |
<?php else : ?> | |
<table class="variations" cellspacing="0"> | |
<tbody> | |
+ <?php $labels = $values = ''; ?> | |
<?php foreach ( $attributes as $attribute_name => $options ) : ?> | |
- <tr> | |
- <td class="label"><label for="<?php echo sanitize_title( $attribute_name ); ?>"><?php echo wc_attribute_label( $attribute_name ); ?></label></td> | |
+ <!--<tr>--> | |
+ <?php ob_start(); ?> | |
+ <td class="label"><label for="<?php echo sanitize_title( $attribute_name ); ?>"><?php echo wc_attribute_label( $attribute_name ); ?></label><?php if (( class_exists('YITH_WCPSC_Frontend_Premium') ) && ('Size' == wc_attribute_label( $attribute_name ))) { YITH_WCPSC_Frontend_Premium::get_instance()->print_button(); } ?></td> | |
+ <?php $labels .= ob_get_contents(); ob_end_clean(); ?> | |
+ <?php ob_start(); ?> | |
<td class="value"> | |
<?php | |
$selected = isset( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ? wc_clean( urldecode( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ) : $product->get_variation_default_attribute( $attribute_name ); | |
@@ -43,8 +47,10 @@ | |
echo end( $attribute_keys ) === $attribute_name ? apply_filters( 'woocommerce_reset_variations_link', '<a class="reset_variations" href="#">' . __( 'Clear', 'woocommerce' ) . '</a>' ) : ''; | |
?> | |
</td> | |
- </tr> | |
+ <?php $values .= ob_get_contents(); ob_end_clean(); ?> | |
+ <!--</tr>--> | |
<?php endforeach;?> | |
+ <?php echo '<tr>', $labels, '<td>Qty</td>', '</tr><tr>', $values, '<td>', woocommerce_quantity_input( array( 'input_value' => isset( $_POST['quantity'] ) ? wc_stock_amount( $_POST['quantity'] ) : 1 ) ), '</td>', '</tr>'; ?> | |
</tbody> | |
</table> | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Variable product add to cart | |
* | |
* This template can be overridden by copying it to yourtheme/woocommerce/single-product/add-to-cart/variable.php. | |
* | |
* HOWEVER, on occasion WooCommerce will need to update template files and you | |
* (the theme developer) will need to copy the new files to your theme to | |
* maintain compatibility. We try to do this as little as possible, but it does | |
* happen. When this occurs the version of the template file will be bumped and | |
* the readme will list any important changes. | |
* | |
* @see https://docs.woocommerce.com/document/template-structure/ | |
* @author WooThemes | |
* @package WooCommerce/Templates | |
* @version 2.5.0 | |
*/ | |
if ( ! defined( 'ABSPATH' ) ) { | |
exit; | |
} | |
global $product; | |
$attribute_keys = array_keys( $attributes ); | |
do_action( 'woocommerce_before_add_to_cart_form' ); ?> | |
<form class="variations_form cart" method="post" enctype='multipart/form-data' data-product_id="<?php echo absint( $product->id ); ?>" data-product_variations="<?php echo htmlspecialchars( json_encode( $available_variations ) ) ?>"> | |
<?php do_action( 'woocommerce_before_variations_form' ); ?> | |
<?php if ( empty( $available_variations ) && false !== $available_variations ) : ?> | |
<p class="stock out-of-stock"><?php _e( 'This product is currently out of stock and unavailable.', 'woocommerce' ); ?></p> | |
<?php else : ?> | |
<table class="variations" cellspacing="0"> | |
<tbody> | |
<?php foreach ( $attributes as $attribute_name => $options ) : ?> | |
<tr> | |
<td class="label"><label for="<?php echo sanitize_title( $attribute_name ); ?>"><?php echo wc_attribute_label( $attribute_name ); ?></label></td> | |
<td class="value"> | |
<?php | |
$selected = isset( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ? wc_clean( urldecode( $_REQUEST[ 'attribute_' . sanitize_title( $attribute_name ) ] ) ) : $product->get_variation_default_attribute( $attribute_name ); | |
wc_dropdown_variation_attribute_options( array( 'options' => $options, 'attribute' => $attribute_name, 'product' => $product, 'selected' => $selected ) ); | |
echo end( $attribute_keys ) === $attribute_name ? apply_filters( 'woocommerce_reset_variations_link', '<a class="reset_variations" href="#">' . __( 'Clear', 'woocommerce' ) . '</a>' ) : ''; | |
?> | |
</td> | |
</tr> | |
<?php endforeach;?> | |
</tbody> | |
</table> | |
<?php do_action( 'woocommerce_before_add_to_cart_button' ); ?> | |
<div class="single_variation_wrap"> | |
<?php | |
/** | |
* woocommerce_before_single_variation Hook. | |
*/ | |
do_action( 'woocommerce_before_single_variation' ); | |
/** | |
* woocommerce_single_variation hook. Used to output the cart button and placeholder for variation data. | |
* @since 2.4.0 | |
* @hooked woocommerce_single_variation - 10 Empty div for variation data. | |
* @hooked woocommerce_single_variation_add_to_cart_button - 20 Qty and cart button. | |
*/ | |
do_action( 'woocommerce_single_variation' ); | |
/** | |
* woocommerce_after_single_variation Hook. | |
*/ | |
do_action( 'woocommerce_after_single_variation' ); | |
?> | |
</div> | |
<?php do_action( 'woocommerce_after_add_to_cart_button' ); ?> | |
<?php endif; ?> | |
<?php do_action( 'woocommerce_after_variations_form' ); ?> | |
</form> | |
<?php | |
do_action( 'woocommerce_after_add_to_cart_form' ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment