问题
I'm trying to get specific attribute value in the woocommerce cart page.
I made custom columns in the table like those.
<td class="product-color" data-title="<?php esc_attr_e( 'Color', 'woocommerce' ); ?>">
<?php
echo apply_filters( 'woocommerce_cart_item_price', WC()->cart->get_product_price( $_product ), $cart_item, $cart_item_key );
?>
</td>
<td class="product-size" data-title="<?php esc_attr_e( 'Size', 'woocommerce' ); ?>">
<?php
echo apply_filters( 'woocommerce_cart_item_price', WC()->cart->get_product_price( $_product ), $cart_item, $cart_item_key );
?>
</td>
<td class="product-price" data-title="<?php esc_attr_e( 'Price', 'woocommerce' ); ?>">
<?php
echo apply_filters( 'woocommerce_cart_item_price', WC()->cart->get_product_price( $_product ), $cart_item, $cart_item_key );
?>
</td>
AS you see all of them get the product price. but I'm trying to get attribute of color and size.
I searched and found this :
foreach( wc_get_product_terms( $product->id, 'pa_size' ) as $attribute_value ){
// Outputting the attibute values one by one
echo $attribute_value . '<br>';
}
I tried it like that :
<?php
echo apply_filters( 'woocommerce_cart_item_color', WC()->$product->get_attributes( $_product ),
$cart_item, $cart_item_key );
?>
but didn't work
my latest try:
$test = $_product->get_attributes();
foreach($test['pa_size']['options'] as $size){
if ($size !== NULL) {
echo apply_filters( 'woocommerce_cart_item_price', $size , $cart_item, $cart_item_key );
var_dump($size);
} else {
echo "Not Specified";
}
}
and I got this result int(48)int(47)
can anyone help me please.
回答1:
how to fetch attribute and value in cart page?
please add below function in function.php file
<?php
/**
* WooCommerce: show all product attributes listed below each item on Cart page
* ------
*/
function wp_woo_cart_attributes( $cart_item, $cart_item_key ) {
$item_data = $cart_item_key['data'];
$attributes = $item_data->get_attributes();
if ( ! $attributes ) {
return $cart_item;
}
$out = $cart_item . '<br />';
foreach ( $attributes as $attribute ) {
// skip variations
if ( $attribute->get_variation() ) {
continue;
}
$name = $attribute->get_name();
if ( $attribute->is_taxonomy() ) {
$product_id = $item_data->get_id();
$terms = wp_get_post_terms( $product_id, $name, 'all' );
if ( ! empty( $terms ) ) {
if ( ! is_wp_error( $terms ) ) {
// get the taxonomy
$tax = $terms[0]->taxonomy;
// get the tax object
$tax_object = get_taxonomy($tax);
// get tax label
if ( isset ( $tax_object->labels->singular_name ) ) {
$tax_label = $tax_object->labels->singular_name;
} elseif ( isset( $tax_object->label ) ) {
$tax_label = $tax_object->label;
// Trim label prefix since WC 3.0
$label_prefix = 'Product ';
if ( 0 === strpos( $tax_label, $label_prefix ) ) {
$tax_label = substr( $tax_label, strlen( $label_prefix ) );
}
}
$out .= $tax_label . ': ';
$tax_terms = array();
foreach ( $terms as $term ) {
$single_term = esc_html( $term->name );
array_push( $tax_terms, $single_term );
}
$out .= implode(', ', $tax_terms). '<br />';
}
}
} else {
// not a taxonomy
$out .= $name . ': ';
$out .= esc_html( implode( ', ', $attribute->get_options() ) ) . '<br />';
}
}
echo $out;
}
add_filter( 'woocommerce_cart_item_name', 'wp_woo_cart_attributes', 10, 2 );
?>
回答2:
Show very specific item attribute 'colour1' in WooCommerce cart
<?php
$item_data = $cart_item['data'];
$attributes = $item_data->get_attributes();
foreach ( $attributes as $attribute )
{
if ( $attribute['name'] == 'colour1' ) {
$out ='';
$out .= $attribute['name'] . ': ';
$out .= $attribute['value'] . '<br />';
echo $out;
}
}
?>
来源:https://stackoverflow.com/questions/45483525/woocommerce-get-specific-attribute-value-on-cart-page