Viewing File: /home/maglabs/sogefab/wp-content/themes/sofass/inc/vendors/woocommerce/functions-swatches.php
<?php
if ( !class_exists("Sofass_Woo_Swatches") ) {
class Sofass_Woo_Swatches {
public static function swatches_list( $image_size = 'woocommerce_thumbnail' ) {
$show_swatches = sofass_get_config( 'show_product_swatches_on_grid' );
if ( !$show_swatches || !sofass_is_woo_swatches_activated() ) {
return;
}
global $product;
$product_id = $product->get_id();
if ( empty( $product_id ) || ! $product->is_type( 'variable' ) ) {
return;
}
$available_variations = $product->get_available_variations();
$attribute_name = sofass_get_config('product_swatches_attribute');
if ( empty( $available_variations ) || empty($attribute_name) ) {
return;
}
$terms = wc_get_product_terms( $product_id, $attribute_name, array( 'fields' => 'all' ) );
if ( empty($terms) ) {
return;
}
$swatches_to_show = array();
foreach ($terms as $term) {
$swatches_to_show[$term->slug] = self::get_option_variations( $attribute_name, $available_variations, $term, $product_id, $image_size );
}
if ( empty( $swatches_to_show ) ) {
return;
}
$output = '<ul class="swatches-wrapper">';
foreach ($swatches_to_show as $key => $data) {
if ( !empty($data) ) {
$output .= '<li>';
$output .= '<a href="javascript:void(0)" class="'.esc_attr($data['swatches_type']).'" data-image_src="'.esc_attr($data['image_src']).'" data-image_srcset="'.esc_attr($data['image_srcset']).'" data-image_sizes="'.esc_attr($data['image_sizes']).'">';
switch ( $data['swatches_type'] ) {
case 'color':
$output .= sprintf( '<div class="swatch-preview swatch-color" style="background-color:%s;width:16px;height:16px;" data-toggle="tooltip" title="%s"></div>', esc_attr( $data['swatches_value'] ), esc_attr( $data['title'] ) );
break;
case 'image':
$image = $data['swatches_value'] ? wp_get_attachment_image_src( $data['swatches_value'] ) : '';
$image = $image ? $image[0] : WC()->plugin_url() . '/assets/images/placeholder.png';
$output .= sprintf( '<img class="swatch-preview swatch-image" src="%s" data-toggle="tooltip" title="%s">', esc_url( $image ), esc_attr( $data['title'] ) );
break;
case 'label':
$output .= sprintf( '<div class="swatch-preview swatch-label" data-toggle="tooltip" title="%s">%s</div>', esc_html( $data['swatches_value'] ), esc_attr( $data['title'] ) );
break;
}
$output .= '</a>';
$output .= '</li>';
}
}
$output .= '</ul>';
echo apply_filters( 'sofass_swatches_list', $output, $product_id, $product );
}
public static function get_option_variations( $attribute_name, $available_variations, $term, $product_id = false, $image_size = 'woocommerce_thumbnail' ) {
$swatches_to_show = array();
foreach ($available_variations as $key => $variation) {
$option_variation = array();
$attr_key = 'attribute_' . $attribute_name;
if( ! isset( $variation['attributes'][$attr_key] )) {
return;
}
$val = $variation['attributes'][$attr_key];
if ( $val == $term->slug ) {
if( ! empty( $variation['image_id'] ) ) {
$src = wp_get_attachment_image_src( $variation['image_id'], $image_size );
$option_variation = array(
'variation_id' => $variation['variation_id'],
'image_src' => $src[0],
'image_srcset' => function_exists( 'wp_get_attachment_image_srcset' ) ? wp_get_attachment_image_srcset( $variation['image_id'], $image_size ) : false,
'image_sizes' => function_exists( 'wp_get_attachment_image_sizes' ) ? wp_get_attachment_image_sizes( $variation['image_id'], $image_size ) : false,
'is_in_stock' => $variation['is_in_stock'],
'title' => $term->name
);
}
// Or get all variations with swatches to show by attribute name
$attr = self::get_tax_attribute( $attribute_name );
$value = get_term_meta( $term->term_id, $attr->attribute_type, true );
$option_variation['swatches_type'] = $attr->attribute_type;
$option_variation['swatches_value'] = $value;
return $option_variation;
}
}
}
public static function get_tax_attribute( $taxonomy ) {
global $wpdb;
$attr = substr( $taxonomy, 3 );
$attr = $wpdb->get_row( $wpdb->prepare(
"SELECT * FROM " . $wpdb->prefix . "woocommerce_attribute_taxonomies WHERE attribute_name=%s",
$attr
));
return $attr;
}
}
}
Back to Directory
File Manager