Sauter la navigation

Ce sujet est résolu. Voici une description du problème et de la solution.

Problem:
The client was unable to display Contact Form 7 forms in secondary languages on their website, even after attempting to manually chnage the form IDs.

Solution:
We identified that the issue was due to the "ACF Field For Contact Form 7" plugin not being compatible with WPML. The form IDs were not being translated correctly (e.g., ID 5 in French and 1567 in English).

We added a filter to the plugin's code to translate the form ID using WPML's

wpml_object_id

hook. This was done in the file

/wp-content/plugins/acf-field-for-contact-form-7/includes/acf-fields/acf-contact-form-7-v5.php

at line 63. We provided the following code :

function load_value( $value, $post_id, $field ) {
			if ( ! is_admin() ) {
				$contact_forms = WPCF7_ContactForm::find();
				$form_id = ! empty( $value ) ? (int) $value : 0;
				$form_id = apply_filters( 'wpml_object_id', $form_id, 'wpcf7_contact_form' );
				foreach ( $contact_forms as $form ) {
					if ( $form->id() === $form_id ) {
						// apply filter.
						$contect_object = apply_filters( 'acf_cf7_object', false );
						// If check filter.
						if ( $contect_object ) {
							return $form;
						} else {
							return do_shortcode( '[contact-form-7 id="' . $form->id() . '" title="' . $form->title() . ']' );
						}
					}
				}
			} else {
				return $value;
			}
		}

We advised the client to test this solution and to contact the plugin author to inform them about the change and invite them to join our GoGlobal program so we can assist in making the plugin compatible. The GoGlobal program link is https://wpml.org/documentation/support/go-global-program/.

We also warned that the added line of code would be overwritten with each plugin update.

If this solution does not seem relevant, please open a new support ticket at WPML support forum.

Il s'agit du forum d'assistance technique de WPML, le plug-in multilingue pour WordPress.

Il est accessible à tous, toutefois seuls les clients de WPML peuvent y publier leurs messages. L'équipe du WPML répond sur le forum 6 jours par semaine, 22 heures par jour.

Marqué : 

Ce sujet contient 5 réponses, a 3 voix.

Dernière mise à jour par Nicolas V. Il y a 1 année et 2 mois.

Assisté par: Nicolas V..

Auteur Articles
Novembre 20, 2023 à 10:48 am

thomasP-116

contact form 7 in taxonomies options

Novembre 20, 2023 à 12:22 pm
Novembre 20, 2023 à 12:53 pm #14876905

thomasP-116

Parfait, Merci bcp

Novembre 21, 2023 à 4:05 pm #14888983

Ilyes
Supporter

Les langues: Français (Français )

Fuseau horaire: Pacific/Easter (GMT-05:00)

Bonjour,

Après vérification, il semble que le mix entre les champs CF7 et ACF empêche WPML de copier le formulaire en deuxieme langue,

Afin de voir si ce problème est dû à la configuration de votre site, ou simplement à la combinaison des champs CF7 et ACF, nous devons isoler le problème.

Et votre aide nous permettra d'accélérer la recherche d'une solution, merci !

J'ai créé un sandbox ici : lien caché

J'ai déjà configuré WPML en 2 langues, installé tous les plugins dont vous avez besoin pour répliquer.

Veuillez procéder comme suit :

- Ouvrez le lien Sandbox mentionné ci-dessus
- Activez ACF PRO si possible
- Créez un formulaire de base similaire à celui que vous avez sur votre site et traduisez-le.
- Créez un groupe de champs pour les produits et la taxonomie des produits similaire à celui que vous aviez déjà sur votre site, assurez-vous de définir le champ du formulaire de contact comme Copier ou Traduire.
- Créez un produit en utilisant les champs personnalisés que vous venez de créer et assignez le formulaire dans le champ des formulaires.
- Traduire le produit

=> Le problème se reproduit-il ?

Veuillez noter que nous n'avons besoin que du thème/plugin et des fonctionnalités associées, vous n'avez pas besoin de créer un site web complet ou de cloner votre site existant.
https://wpml.org/faq/how-to-reproduce-issues-and-share-them-with-wpml-support/

Faites-moi savoir quand c'est fait.

Novembre 22, 2023 à 5:36 pm #14901629

thomasP-116

Bonjour,

Le formulaire peut se traduire sur un autre autre site sans souci je pense.

J'ai essayé de l'ajouter sur votre sendbox mais il serait plus pertinent de trouver une solution sur le site actuel avec son environnement, je ne vois pas comment recréer cet environnement et l'ensemble des taxonomies sur un site tiers.

Est il possible de demander de l'aide à Nicolas Vallet qui a eu l'habitude de travailler sur le site directement svp ?

Cordialement,

Novembre 23, 2023 à 7:44 pm #14911697

Nicolas V.
Supporter

Les langues: Anglais (English ) Français (Français )

Fuseau horaire: America/Lima (GMT-05:00)

Bonjour,

Le champ "Contact From 7" provient du plugin "ACF Field For Contact Form 7" qui n'est malheureusement pas encore compatible avec WPML.

Le problème est que l'ID du form n'est pas traduite. EN FR l'ID du Formulaire est 5 alors qu'en Anglais 1567.

Alors j'ai ajouté un filtre dans le code de ce plugin mais veuillez noter que je ne suis pas développeur et encore moins l'auteur de ce plugin. Veuillez donc tester cela et surtout merci de contacter l'auteur du plugin pour lui expliquer le changement que j'ai fait et invité le à rejoindre notre programme GoGlobal. Nos développeurs se seront un plaisir de l'aider à rendre son plugin compatible. Lien: https://wpml.org/documentation/support/go-global-program/

De plus à chaque mise à jour de ce plugin, la ligne que j'ai ajouté sera écrasée.

Après ces avertissements voici ce que j'ai fait:

Dans le fichier /wp-content/plugins/acf-field-for-contact-form-7/includes/acf-fields/acf-contact-form-7-v5.php ligne 63 j'ai ajouté notre hook "wpml_object_id" pour obtenir l'ID de l'objet dans la langue actuellement visitée.
Ref: https://wpml.org/wpml-hook/wpml_object_id/

function load_value( $value, $post_id, $field ) {
			if ( ! is_admin() ) {
				$contact_forms = WPCF7_ContactForm::find();
				$form_id = ! empty( $value ) ? (int) $value : 0;
				$form_id = apply_filters( 'wpml_object_id', $form_id, 'wpcf7_contact_form' );
				foreach ( $contact_forms as $form ) {
					if ( $form->id() === $form_id ) {
						// apply filter.
						$contect_object = apply_filters( 'acf_cf7_object', false );
						// If check filter.
						if ( $contect_object ) {
							return $form;
						} else {
							return do_shortcode( '[contact-form-7 id="' . $form->id() . '" title="' . $form->title() . ']' );
						}
					}
				}
			} else {
				return $value;
			}
		}

Je vais faire remonter ce code à notre équipe de compatibilité pour voir s'il est correct mais cela semble fonctionner sur votre frontend (faites tout de même des tests aussi de votre côté).

Novembre 24, 2023 à 3:20 pm #14918899

Nicolas V.
Supporter

Les langues: Anglais (English ) Français (Français )

Fuseau horaire: America/Lima (GMT-05:00)

Bonjour,

Je viens d'avoir la confirmation que ce code devrait fonctionner correctement mais que bien sûr il est préférable que le problème soit reporté à l'auteur (avec l'invitation au programme Go Global) afin qu'il l'intègre dans son code pour les prochaines mises à jour.

Une autre solution d'appoint qui ne touche pas au code mais est plus contraignante pour vous serait celle-ci:
1. Dans functions.php ajoutez ce code qui autorise la traduction de chiffres

function wpmlsupp_7499_allow_translating_numbers( $is_translatable, $job_translate ) {
    $data = $job_translate['field_data'];
    if ( 'base64' === $job_translate['field_format'] ) {
        $data = base64_decode( $data );
    }
    if ( is_numeric( $data ) ) {
        return true;
    }
    return $is_translatable;
}
add_filter( 'wpml_tm_job_field_is_translatable', 'wpmlsupp_7499_allow_translating_numbers', 10, 2 );

2. Dans ACF > Groupes de champs, changez la préférence de traduction du champ "Contact Form" à "traduire"
3. Lorsque vous traduirez la page, vous pourrez traduire la valeur du champ contact form qui est l'ID du formulaire (donc ici vous devez traduire 5 par 1567)

Cela prendra plus de temps et vous devrez connaitre l'ID du formulaire dans chaque langue pour faire la traduction.

Novembre 28, 2023 à 10:00 am #14937475

thomasP-116

Bonjour Nicolas,

Encore un immense merci pour votre efficacité et pour avoir fait remonter l'information auprès de votre service global.

Tout semble fonctionner et je vais conserver cette ligne de code au chaud pour les prochaines MAJ du plugin qui vont l'écraser.

En attendant que cette fonction devienne native avec la plugin.

Très belle semaine,

Cordialement,
Thomas