Created
February 28, 2018 05:30
-
-
Save cargabsj175/e938c4885e43726f5ea89185f918cd08 to your computer and use it in GitHub Desktop.
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
/** | |
* Attributes shortcode callback. | |
* Original by: https://stackoverflow.com/users/383847/helgatheviking | |
*/ | |
/** | |
* Usage: This would be used in 1 of 2 ways. | |
* First, to display specific attributes use: | |
* [display_attributes attributes="color|material"] | |
* Second, to display all attributes use: | |
* [display_attributes] | |
*/ | |
function so_39394127_attributes_shortcode( $atts ) { | |
global $product; | |
if( ! is_object( $product ) || ! $product->has_attributes() ){ | |
return; | |
} | |
// parse the shortcode attributes | |
$args = shortcode_atts( array( | |
'attributes' => array_keys( $product->get_attributes() ), // by default show all attributes | |
), $atts ); | |
// is pass an attributes param, turn into array | |
if( is_string( $args['attributes'] ) ){ | |
$args['attributes'] = array_map( 'trim', explode( '|' , $args['attributes'] ) ); | |
} | |
// start with a null string because shortcodes need to return not echo a value | |
$html = ''; | |
if( ! empty( $args['attributes'] ) ){ | |
foreach ( $args['attributes'] as $attribute ) { | |
// get the WC-standard attribute taxonomy name | |
$taxonomy = strpos( $attribute, 'pa_' ) === false ? wc_attribute_taxonomy_name( $attribute ) : $attribute; | |
if( taxonomy_is_product_attribute( $taxonomy ) ){ | |
// Get the attribute label. | |
$attribute_label = wc_attribute_label( $taxonomy ); | |
// Build the html string with the label followed by a clickable list of terms. | |
// heads up that in WC2.7 $product->id needs to be $product->get_id() | |
$html .= get_the_term_list( $product->id, $taxonomy, '<li class="bullet-arrow">' . $attribute_label . ': ' , ', ', '</li>' ); | |
} | |
} | |
// if we have anything to display, wrap it in a <ul> for proper markup | |
// OR: delete these lines if you only wish to return the <li> elements | |
if( $html ){ | |
$html = '<ul class="product-attributes">' . $html . '</ul>'; | |
} | |
} | |
return $html; | |
} | |
add_shortcode( 'display_attributes', 'so_39394127_attributes_shortcode' ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment