Last active
November 13, 2021 16:16
-
-
Save tuongpgjz/552e7f0e8244d8e7e7cd612878bf8571 to your computer and use it in GitHub Desktop.
Auto set default variants for WooCommerce products. Copy to woocommerce/single-product/add-to-cart/variable.php
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 | |
/** | |
Put this file to folder of your theme to overide default option | |
woocommerce/single-product/add-to-cart/variable.php | |
* | |
* Check "IMPORTANT HERE" part to set default variant with attribute. Else code will set first variant to default. | |
* | |
* | |
* By Anthony Pham from SalesGen.io | |
* | |
*/ | |
defined( 'ABSPATH' ) || exit; | |
global $product; | |
$attribute_keys = array_keys( $attributes ); | |
$variations_json = wp_json_encode( $available_variations ); | |
$variations_attr = function_exists( 'wc_esc_json' ) ? wc_esc_json( $variations_json ) : _wp_specialchars( $variations_json, ENT_QUOTES, 'UTF-8', true ); | |
do_action( 'woocommerce_before_add_to_cart_form' ); ?> | |
<form class="variations_form cart" action="<?php echo esc_url( apply_filters( 'woocommerce_add_to_cart_form_action', $product->get_permalink() ) ); ?>" method="post" enctype='multipart/form-data' data-product_id="<?php echo absint( $product->get_id() ); ?>" data-product_variations="<?php echo $variations_attr; // WPCS: XSS ok. ?>"> | |
<?php do_action( 'woocommerce_before_variations_form' ); ?> | |
<?php if ( empty( $available_variations ) && false !== $available_variations ) : ?> | |
<p class="stock out-of-stock"><?php echo esc_html( apply_filters( 'woocommerce_out_of_stock_message', __( 'This product is currently out of stock and unavailable.', 'woocommerce' ) ) ); ?></p> | |
<?php else : ?> | |
<table class="variations" cellspacing="0"> | |
<tbody> | |
<?php | |
// IMPORTANT HERE!!!! | |
$default_option = array('hoodie', 's'); //Forcus variant will be default ELSE set first variant to default. | |
foreach ( $attributes as $attribute_name => $options ) : ?> | |
<tr> | |
<td class="label"><label for="<?php echo esc_attr( sanitize_title( $attribute_name ) ); ?>"><?php echo wc_attribute_label( $attribute_name ); // WPCS: XSS ok. ?></label></td> | |
<td class="value"> | |
<?php | |
$selected = $options[0]; | |
foreach ($options as $option) { | |
if ( in_array(strtolower($option), $default_option) ) { | |
$selected = $option; | |
break; | |
} | |
} | |
wc_dropdown_variation_attribute_options( | |
array( | |
'options' => $options, | |
'attribute' => $attribute_name, | |
'product' => $product, | |
'selected' => $selected, | |
) | |
); | |
echo end( $attribute_keys ) === $attribute_name ? wp_kses_post( apply_filters( 'woocommerce_reset_variations_link', '<a class="reset_variations" href="#">' . esc_html__( 'Clear', 'woocommerce' ) . '</a>' ) ) : ''; | |
?> | |
</td> | |
</tr> | |
<?php endforeach; ?> | |
</tbody> | |
</table> | |
<div class="single_variation_wrap"> | |
<?php | |
/** | |
* Hook: woocommerce_before_single_variation. | |
*/ | |
do_action( 'woocommerce_before_single_variation' ); | |
/** | |
* Hook: woocommerce_single_variation. 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' ); | |
/** | |
* Hook: woocommerce_after_single_variation. | |
*/ | |
do_action( 'woocommerce_after_single_variation' ); | |
?> | |
</div> | |
<?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