John Davidson

php - Showing woocommerce product attribute slugs underneath product title

0 comments
Message:


I've been trying for about three days now to get 4 of my woocommerce product attribute slugs instead of names to display underneath the products.


So far I've been using this code that does seem to do exactly what I want except for taking the attribute name instead of the value.


    /**
* Display available attributes.
*
* @return array|void
*/
function iconic_available_attributes() {
global $product;

if ( ! $product->is_type( 'variable' ) ) {
return;
}

$attributes = iconic_get_available_attributes( $product );

if ( empty( $attributes ) ) {
return;
}

foreach ( $attributes as $attribute ) {
?>
<div class="iconic-available-attributes">
<p class="iconic-available-attributes__title"><?php _e( 'Available', 'iconic' ); ?> <strong><?php echo $attribute['name']; ?></strong></p>

<ul class="iconic-available-attributes__values">
<?php foreach ( $attribute['values'] as $value ) { ?>
<li class="iconic-available-attributes__value <?php echo $value['available'] ? '' : 'iconic-available-attributes__value--unavailable'; ?>"><?php echo $value['name']; ?></li>
<?php } ?>
</ul>
</div>
<?php
}
}


/**
* Get available attributes.
*
* @param WC_Product_Variable $product
*
* @return array
*/
/**

* @snippet Display Custom Products Attributes on the Products Page

*/

function cw_woo_attribute(){

global $product;

$attributes = $product->get_attributes();

if ( ! $attributes ) {

return;

}

$display_result = '';

foreach ( $attributes as $attribute ) {

if ( $attribute->get_variation() ) {

continue;

}

$name = $attribute->get_name();

if ( $attribute->is_taxonomy() ) {

$terms = wp_get_post_terms( $product->get_id(), $name, 'all' );

$cwtax = $terms[0]->taxonomy;

$cw_object_taxonomy = get_taxonomy($cwtax);

if ( isset ($cw_object_taxonomy->labels->singular_name) ) {

$tax_label = $cw_object_taxonomy->labels->singular_name;

} elseif ( isset( $cw_object_taxonomy->label ) ) {

$tax_label = $cw_object_taxonomy->label;

if ( 0 === strpos( $tax_label, 'Product ' ) ) {

$tax_label = substr( $tax_label, 8 );

}

}
$display_result .="<span class='attribute'>" . $tax_label . "</span>";

$tax_terms = array();

foreach ( $terms as $term ) {

$single_term = esc_html( $term->name );

array_push( $tax_terms);

}
$display_result .= implode(', ', $tax_terms);

} else {

$display_result .= $name;

$display_result .= esc_html( implode( ', ', $attribute->get_options() ) );

}
}

echo "<span class='attributeline'>" . "| " . "</span>" . $display_result;

}
add_action('woocommerce_shop_loop_item_title', 'cw_woo_attribute', 25);

I'm not a PHP coder in any way so I've been struggling to get it to work.


Here is a sample of the current situation showing the name: "plant type" instead of the value: "annual".



Looking forward to your replies so I can move on with the rest of the shop!



My Answer:
>has_attributes() ) {
return;
}

$attributes = $product->get_attributes();

foreach ( $attributes as $attribute ) {
$attribute_name = $attribute->get_name();
$attribute_value = $product->get_attribute( $attribute_name );

echo '' . $attribute_value . '';
}
}

add_action( 'woocommerce_single_product_summary', 'iconic_available_attributes', 25 );

This code should display the attribute values underneath the product title on the single product page. Make sure to add this code to your theme's functions.php file.

Rate this post

3 of 5 based on 6150 votes

Comments




© 2024 Hayatsk.info - Personal Blogs Platform. All Rights Reserved.
Create blog  |  Privacy Policy  |  Terms & Conditions  |  Contact Us