This thread is resolved. Here is a description of the problem and solution.
Problem: The client added custom code to the functions.php file in their child theme to display stock status in a WooCommerce product dropdown but was unable to translate the 'In Stock' and 'Out of Stock' text.
Solution: 1. We advised the client to wrap the hardcoded strings with the gettext function
__()
to make them translatable. Specifically, replace:
return $stock == 1 ? ' - (In Stock)' : ' - (Out of Stock)';
2. We instructed the client to scan the theme for strings from the WPML > Theme and plugins localization page. 3. We directed the client to go to WPML > String Translation, search for the 'In Stock' and 'Out of Stock' strings, and add the translations.
For more details, we provided documentation links:
{code}
// Function that will check the stock status and display the corresponding additional text
function get_stock_status_text( $product, $name, $term_slug ){
foreach ( $product->get_available_variations() as $variation ){
if($variation['attributes'][$name] == $term_slug ) {
$stock = $variation['is_in_stock'];
break;
}
}
return $stock == 1 ? ' - (In Stock)' : ' - (Out of Stock)';
}
// The hooked function that will add the stock status to the dropdown options elements.
add_filter( 'woocommerce_dropdown_variation_attribute_options_html', 'show_stock_status_in_dropdown', 10, 2);
function show_stock_status_in_dropdown( $html, $args ) {
// Only if there is a unique variation attribute (one dropdown)
if( sizeof($args['product']->get_variation_attributes()) == 1 ) :
foreach ( $terms as $term ) {
if ( in_array( $term->slug, $options ) ) {
// HERE Added the function to get the text status
$stock_status = get_stock_status_text( $product, $name, $term->slug );
$html .= '<option value="' . esc_attr( $term->slug ) . '" ' . selected( sanitize_title( $args['selected'] ), $term->slug, false ) . '>' . esc_html( apply_filters( 'woocommerce_variation_option_name', $term->name ) . $stock_status ) . '</option>';
}
}
} else {
foreach ( $options as $option ) {
$selected = sanitize_title( $args['selected'] ) === $args['selected'] ? selected( $args['selected'], sanitize_title( $option ), false ) : selected( $args['selected'], $option, false );
// HERE Added the function to get the text status
$stock_status = get_stock_status_text( $product, $name, $option );
$html .= '<option value="' . esc_attr( $option ) . '" ' . $selected . '>' . esc_html( apply_filters( 'woocommerce_variation_option_name', $option ) . $stock_status ) . '</option>';
}
}
}
$html .= '</select>';
endif;
return $html;
}
{/code}Hey, I added a code to functions.php on my child theme and I can't manage to translate it.
I attached a screenshot. I want to translate the "Out of stock" and "In stock".
I tried to sync on "Theme and plugins localization" but it didn't work out.
Also, I tried on "Translate texts in admin screens", and I found 2 matched strings of "Out of stock" and "In stock", I translated them but nothing has chagned.
Also tried to remove cache both from my website and the WPML plugin and still nothing chagned.
I attached also the code I added to my functions.php so you could see.