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.
We use cookies to optimize our website and services. Your consent allows us to process data such as browsing behavior. Not consenting may affect some features.
Functional
Always active
Required for our website to operate and communicate correctly.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
We use these to analyze the statistics of our site. Collected information is completely anonymous.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
These cookies track your browsing to provide ads relevant to you.