Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save GabrielGil/e1df5978ea73b2545b35 to your computer and use it in GitHub Desktop.
Save GabrielGil/e1df5978ea73b2545b35 to your computer and use it in GitHub Desktop.
<?php
// Add to functions.php
/*===================================================
Created by sk from Renegade Empire with help
from these sources:
http://docs.woothemes.com/document/editing-product-data-tabs/
http://www.sean-barton.co.uk/2013/03/remove-woocommerce-20-reviews-tab/#.UYnWe7XfB6N
http://www.sean-barton.co.uk/2013/03/sb-add-woocommerce-tabs-wordpress-plugin/#.UYrYL7XfB6M
====================================================*/
/*===================================================
Options
====================================================*/
$re_wcvt_options = array(
'tab_title' => 'Product Variations', // change the tile of the tab
'sku_title' => 'REF #', // change the sku column heading
'show_price' => 'yes', // show price column: yes or no
'show_description' => 'yes', // show description column: yes or no
'tab_priority' => '5', // 5 is good to make the tab appear first
);
/*===================================================
Add the tab
====================================================*/
add_filter( 'woocommerce_product_tabs', 're_woo_product_variations_tab' );
function re_woo_product_variations_tab() {
global $woocommerce, $product, $post, $re_wcvt_options;
// $available_variations = $product->get_available_variations();
// $attributes = $product->get_attributes();
if (is_product() and $product->product_type == 'variable') {
// Adds the new tab
$tabs['variations_table'] = array(
'title' => __( $re_wcvt_options['tab_title'], 'woocommerce' ),
'priority' => 50,
'callback' => 're_woo_product_variations_tab_content'
);
return $tabs;
}
}
/*===================================================
Build the tab content
====================================================*/
function re_woo_product_variations_tab_content() {
global $woocommerce, $product, $post, $re_wcvt_options;
$available_variations = $product->get_available_variations();
$attributes = $product->get_attributes();
// The new tab content
//echo '<h2>Product Variations</h2>';
//echo '<p>Here\'s your new product tab.</p>';
?>
<table class="table table-striped table-hover table-bordered varations-table tablesorter">
<thead>
<tr>
<th><?php echo $re_wcvt_options['sku_title']; ?></th>
<?php
// Show description if option is set to yes
if ($re_wcvt_options['show_description'] == 'yes') : ?>
<th>Description</th>
<?php endif; ?>
<?php foreach ( $attributes as $name => $options) :?>
<th>
<?php
//echo $woocommerce->attribute_label($name);
$attr_name = $options['name'];
if (0 === strpos($attr_name, 'pa_')){
$attr_name = wc_attribute_label($attr_name);
}
echo $attr_name;
?>
</th>
<?php endforeach;?>
<?php
// Show price if option is set to yes
if ($re_wcvt_options['show_price'] == 'yes') : ?>
<th>Price</th>
<?php endif; ?>
<th class="var-qty">&nbsp;</th>
<th class="var-add-to-cart">&nbsp;</th>
</tr>
</thead>
<tbody>
<?php
/*
echo '<pre>';
print_r($re_wcvt_options);
echo '</pre>';
*/
?>
<?php foreach ($available_variations as $prod_variation) : ?>
<?php
// get some vars to work with
$post_id = $prod_variation['variation_id'];
$post_object = get_post($post_id);
//echo '<pre>';
//print_r($prod_variation);
//echo '</pre>';
?>
<tr>
<td>
<?php
// echo substr($prod_variation['sku'], 5, 100) ; // output SKU but trim the first part that is added
echo $prod_variation['sku'];
?>
</td>
<?php
// Show description if option is set to yes
if ($re_wcvt_options['show_description'] == 'yes') : ?>
<td>
<?php
$variation_desc = get_post_meta( $post_object->ID, '_description', true);
if ( !empty($post_object->post_content)){
$variation_desc = $post_object->post_content; // post content
} elseif (!empty($variation_desc)) {
$variation_desc = get_post_meta( $post_object->ID, '_description', true); // get meta description
} else {
$variation_desc = get_the_title($product->id); // parent title
}
echo $variation_desc;
?>
</td>
<?php endif; ?>
<?php foreach ($prod_variation['attributes'] as $attr_name => $attr_value) : ?>
<td>
<?php
// Get the correct variation values
if (strpos($attr_name, '_pa_')){ // variation is a pre-definted attribute
$attr_name = substr($attr_name, 10);
$attr = get_term_by('slug', $attr_value, $attr_name);
$attr_value = $attr->name;
} else { // variation is a custom attribute
//$attr = maybe_unserialize( get_post_meta( $post->ID, '_product_attributes' ) );
//$attr_value = var_dump($attr);
//$attr = get_term_by('slug', $attr_value, $attr_name);
//$attr_value = $attr->name;
}
echo $attr_value;
?>
</td>
<?php endforeach;?>
<?php
// Show price if option is set to yes
if ($re_wcvt_options['show_price'] == 'yes') : ?>
<td><?php echo get_woocommerce_currency_symbol() . get_post_meta( $post_object->ID, '_price', true); ?></td>
<?php endif; ?>
<form action="<?php echo do_shortcode('[add_to_cart_url id="'.$product->id.'"]'); ?>" class="variations_form cart" method="post" enctype="multipart/form-data" data-product_id="<?php echo $product->id; ?>">
<td>
<?php woocommerce_quantity_input(); ?>
</td>
<td>
<input type="hidden" name="variation_id" value="<?php echo $post_id; ?>">
<?php foreach ($prod_variation['attributes'] as $attr_name => $attr_value) : ?>
<input type="hidden" name="<?php echo sanitize_title($attr_name); ?>" value="<?php echo $attr_value ;?>">
<?php endforeach;?>
<button type="submit" class="btn btn-small button add-to" type="button">Add to cart</button>
</td>
</form>
</tr>
<?php endforeach;?>
</tbody>
</table>
<?php
//echo '<pre>';
//print_r($prod_variation['attributes']);
//echo '</pre>';
?>
<?php
}
/*===================================================
Tab Position
====================================================*/
add_filter( 'woocommerce_product_tabs', 're_woo_move_variation_table_tab', 98);
function re_woo_move_variation_table_tab($tabs) {
global $re_wcvt_options;
if ($tabs['variations_table']) {
$tabs['variations_table']['priority'] = $re_wcvt_options['tab_priority'];
}
return $tabs;
}
@alexander
Copy link

@GabrielGil Sir, do you have a live demo of this code? I'm eager to implement this in my project.

@ivanoconfa
Copy link

The add to cart not working so added this below the submit button to make it work:
<input type="hidden" name="add-to-cart" value="<?php echo absint( $product->get_id() ); ?>" /> <input type="hidden" name="product_id" value="<?php echo absint( $product->get_id() ); ?>" /> <input type="hidden" name="variation_id" class="variation_id" value="0" />

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment