Problem:
When English was not a default language, the product attributes were created in English, as well as, creating attributes were being mixed up in different languages.
Solution:
Our team fixed the issue by providing a temporary workaround. They also found an underlying problem and provided another temporary fix. Please consider following:
Please note that this isn't an officially supported workaround, but is a temporary fix and should be used with great care!!
- Take full backup of site and database beforehand.
- Open wp-content/plugins/wpml-string-translation/classes/filters/autoregister/class-wpml-autoregister-save-strings.php for editing.
- Replace:
public function get_source_lang( $name, $domain ) {
$domain_lang = $this->lang_of_domain->get_language( $domain );
if ( ! $domain_lang ) {
$flag = 0 === strpos( $domain, 'admin_texts_' )
|| WPML_ST_Blog_Name_And_Description_Hooks::is_string( $name );
$domain_lang = $flag ? $this->sitepress->get_user_admin_language( get_current_user_id() ) : 'en';
}
return $domain_lang;
}
- With:
public function get_source_lang( $name, $domain ) {
$domain_lang = $this->lang_of_domain->get_language( $domain );
if ( ! $domain_lang ) {
$flag = 0 === strpos( $domain, 'admin_texts_' )
|| WPML_ST_Blog_Name_And_Description_Hooks::is_string( $name );
$domain_lang = $flag ? $this->sitepress->get_user_admin_language( get_current_user_id() ) : apply_filters('wpml_default_language', NULL );
}
return $domain_lang;
}
- Save the file.
- Open wp-content/plugins/woocommerce-multilingual/inc/class-wcml-wc-strings.php for editing.
- Replace following code:
public function add_hooks() {
add_action( 'init', [ $this, 'add_on_init_hooks' ] );
// Needs to run before WC registers taxonomies on init priority 5.
foreach ( wc_get_attribute_taxonomies() as $tax ) {
add_filter(
'woocommerce_taxonomy_args_' . wc_attribute_taxonomy_name( $tax->attribute_name ),
function ( $args ) use ( $tax ) {
return $this->translate_attribute_labels( $args, $tax->attribute_label );
}
);
}
}
- With the following code:
public function add_hooks() {
add_action( 'init', [ $this, 'add_on_init_hooks' ] );
// Needs to run before WC registers taxonomies on init priority 5.
foreach ( wc_get_attribute_taxonomies() as $tax ) {
add_filter(
'woocommerce_taxonomy_args_' . wc_attribute_taxonomy_name( $tax->attribute_name ),
function ( $args ) use ( $tax ) {
if ( !isset( $_POST["action"] ) || ( $_POST["action"] != "wpml_get_terms_and_labels_for_taxonomy_table" && $_POST["action"] != "wpml_tt_save_labels_translation" ) ) {
return $this->translate_attribute_labels( $args, $tax->attribute_label );
} else {
return $args;
}
}
);
}
}
- Save the file.
After that:
- new attributes 'll be created in site default language.
- for existing attributes, you'll have to delete these from:
--- Products -> Attributes
--- and WPML -> String translation
--- and then create these attributes again.
Please note that the issues have been escalated to our dev team for a proper fix in a future release.
If this solution does not resolve your issue or seems outdated, we highly recommend checking related known issues at https://wpml.org/known-issues/, verifying the version of the permanent fix, and confirming that you have installed the latest versions of themes and plugins. If the problem persists, please open a new support ticket at WPML support forum for further assistance.