简体   繁体   中英

Show “Out Of Stock” next to product variation in Woocommerce

I want to make some modification of my site, but for some reason, can get it. i tryed to use this function that found into this thread of Stack :

add_filter( 'woocommerce_variation_option_name', 
'customizing_variations_terms_name', 10, 1 );
function customizing_variations_terms_name( $term_name ){

if(is_admin())
    return $term_name;

global $product;
$second_loop_stoped = false;

// Get available product variations
$product_variations = $product->get_available_variations();

// Iterating through each available product variation
foreach($product_variations as $variation){

    $variation_id = $variation['variation_id'];
    $variation_obj = new WC_Product_Variation( $variation_id );

    ## WOOCOMMERCE RETRO COMPATIBILITY ##
    if ( version_compare( WC_VERSION, '3.0', '<' ) ) # BEFORE Version 3 (older)
    {
        $stock_status = $variation_obj->stock_status;
        $stock_qty = intval($variation_obj->stock);

        // The attributes WC slug key and slug value for this variation
        $attributes_arr = $variation_obj->get_variation_attributes();
    }
    else # For newest verions: 3.0+ (and Up)
    {
        $stock_status = $variation_obj->get_stock_status();
        $stock_qty = $variation_obj->get_stock_quantity();

        // The attributes taxonomy key and slug value for this variation
        $attributes_arr = $variation_obj->get_attributes();
    }

    if(count($attributes_arr) != 1) // Works only for 1 attribute set in the product
        return $term_name;

    // Get the terms for this attribute
    foreach( $attributes_arr as $attr_key => $term_slug){
        // Get the attribute taxonomy
        $term_key = str_replace('attribute_', '', $attr_key );

        // get the corresponding term object
        $term_obj = get_term_by( 'slug', $term_slug, $term_key );
        if( $term_obj->name == $term_name ){ // If the term name matches we stop the loops
            $second_loop_stoped = true;
            break;
        }
    }
    if($second_loop_stoped)
        break;
}
if( $stock_qty>0 )
    return $term_name .= ' - ' . $stock_status . ' ('.$stock_qty.')';
else
    return $term_name .= ' - ' . $stock_status;

}

but for some reason when insert into functions, show me "outofstock" next to every variation. I dont use standard Woocommerce dropdown variation style, and use WC Variations Radio Buttons to show radio buttons next to each variation, instead of dropdown. The problem is that i want to show only "Out Of Stock" , next to each variation. not "In Stock", so customer will know that wanted variation is not in stock before press Add to Cart button. SO seems that issue is this code:

if( $stock_qty>0 )
return $term_name .= ' - ' . $stock_status . ' ('.$stock_qty.')';
else
return $term_name .= ' - ' . $stock_status;

}

function looks like return

return $term_name .= ' - ' . $stock_status;

all the time. Any help ? Preview from my issue can be seen here . Thanks.

EDIT : This is the code from variable.php Radio Button Plugin where print variations as radio buttons:

<td class="value">
                        <?php
                        if ( ! empty( $options ) ) {
                            if ( taxonomy_exists( $name ) ) {
                                // Get terms if this is a taxonomy - ordered. We need the names too.
                                $terms = wc_get_product_terms( $product->get_id(), $name, array( 'fields' => 'all' ) );

                                foreach ( $terms as $term ) {
                                    if ( ! in_array( $term->slug, $options ) ) {
                                        continue;
                                    }
                                    print_attribute_radio( $checked_value, $term->slug, $term->name, $sanitized_name );
                                }
                            } else {
                                foreach ( $options as $option ) {
                                    print_attribute_radio( $checked_value, $option, $option, $sanitized_name );
                                }
                            }
                        }

                        echo end( $attribute_keys ) === $name ? 
apply_filters( 'woocommerce_reset_variations_link', '<a 
class="reset_variations" href="#">' . __( 'Clear', 'woocommerce' ) . '</a>' 
) : '';
                        ?>
                    </td>

Maybe need to update something there to show properly?

do this instead

if( $stock_qty>0 )
    //return $term_name .= ' - ' . $stock_status . ' ('.$stock_qty.')';
    return $term_name;
else
    //return $term_name .= ' - ' . $stock_status;
return $term_name .= ' - Out Of Stock';

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM