Sauter la navigation

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 22 réponses, a 2 voix.

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

Assisté par: Nicolas V..

Auteur Articles
Septembre 18, 2023 à 5:30 pm #14414617

nicolasF-24

Bonjour Nicolas,

Merci !

Par contre le problème de se ticket n’est pas résolu, je n’ai pas encore eu de retour de votre équipe

Septembre 19, 2023 à 1:50 pm #14420115

Nicolas V.
Supporter

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

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

Bonjour,

Oui pardon, le ticket interne a été remonté à un niveau plus haut. Mes excuses pour la confusion.

Septembre 21, 2023 à 12:04 pm #14438465

Nicolas V.
Supporter

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

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

Bonjour,

Il s'agit ici d'un bug qui se produit lorsque le taxonomy_term_id est différent du term_id. Merci de l'avoir reporté, notre équipe de développement va se pencher sur la question.

En attendant voici un "workaround". Comme toute solution provisoire, merci de prendre toute les précautions en faisant un backup complet de votre site et base de données. Et idéalement de tester cela sur une copie staging avant.

1. Accédez à votre serveur via FTP (ou Cpanel)
2. Ouvrez le fichier \wp-content\plugins\sitepress-multilingual-cms\classes\translation-jobs\class-wpml-element-translation-package.php
3. Remplacez la fonction get_taxonomy_fields ligne 426

	private function get_taxonomy_fields( $post ) {
		global $sitepress;

		$termMetaKeysToTranslate = self::getTermMetaKeysToTranslate();

		// $getTermFields :: WP_Term → [[fieldId, fieldVal]]
		$getTermFields = function ( $term ) {
			return [
				[ FieldId::forTerm( $term->term_taxonomy_id ), $term->name ],
				[ FieldId::forTermDescription( $term->term_taxonomy_id ), $term->description ],
			];
		};

		// $getTermMetaFields :: [metakeys] → WP_Term → [[fieldId, fieldVal]]
		$getTermMetaFields = curryN(
			2,
			function ( $termMetaKeysToTranslate, $term ) {

				// $getMeta :: int → string → object
				$getMeta = curryN(
					2,
					function ( $termId, $key ) {
						return (object) [
							'id'   => $termId,
							'key'  => $key,
							'meta' => get_term_meta( $termId, $key ),
						];
					}
				);

				// $hasMeta :: object → bool
				$hasMeta = function ( $termData ) {
					return isset( $termData->meta[0] );
				};

				// $makeField :: object → [fieldId, $fieldVal]
				$makeField = function ( $termData ) {
					return [ FieldId::forTermMeta( $termData->id, $termData->key ), $termData->meta[0] ];
				};

				// $get :: [metakeys] → [[fieldId, $fieldVal]]
				$get = pipe(
					Fns::map( $getMeta( $term->term_taxonomy_id ) ),
					Fns::filter( $hasMeta ),
					Fns::map( $makeField )
				);

				return $get( $termMetaKeysToTranslate );
			}
		);

		// $getAll :: [WP_Term] → [[fieldId, fieldVal]]
		$getAll = Fns::converge( Lst::concat(), [ $getTermFields, $getTermMetaFields( $termMetaKeysToTranslate ) ] );

		return wpml_collect( $sitepress->get_translatable_taxonomies( false, $post->post_type ) ) // [taxonomies]
			->map( Post::getTerms( $post->ID ) ) // [Either false|WP_Error [WP_Term]]
			->filter( Fns::isRight() ) // [Right[WP_Term]]
			->map( invoke( 'get' ) ) // [[WP_Term]]
			->flatten() // [WP_Term]
			->map( $getAll ) // [[fieldId, fieldVal]]
			->mapWithKeys( Lst::fromPairs() ) // [fieldId => fieldVal]
			->toArray();
	}

Par ceci:

private function get_taxonomy_fields( $post ) {
		global $sitepress;

		$termMetaKeysToTranslate = self::getTermMetaKeysToTranslate();

		// $getTermFields :: WP_Term → [[fieldId, fieldVal]]
		$getTermFields = function ( $term ) {
			return [
				[ FieldId::forTerm( $term->term_taxonomy_id ), $term->name ],
				[ FieldId::forTermDescription( $term->term_taxonomy_id ), $term->description ],
			];
		};

		// $getTermMetaFields :: [metakeys] → WP_Term → [[fieldId, fieldVal]]
		$getTermMetaFields = curryN(
			2,
			function ( $termMetaKeysToTranslate, $term ) {

				// $getMeta :: int → string → object
				$getMeta = curryN(
					2,
					function ( $termId, $key ) {
						global $wpdb;  //start of the workaround
						$term_taxonomy_id = $termData->id;
						$termId = $wpdb->get_var( $wpdb->prepare( "SELECT term_id FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id = %d", $termId ) );
            //change the $termid based on the proper term_taxonomy_id
						return (object) [
							'id'   => $termId,
							'key'  => $key,
							'meta' => get_term_meta( $termId, $key ),
						];
					}
				);

				// $hasMeta :: object → bool
				$hasMeta = function ( $termData ) {
					return isset( $termData->meta[0] );
				};

				// $makeField :: object → [fieldId, $fieldVal]
				$makeField = function ( $termData ) {
					return [ FieldId::forTermMeta( $termData->id, $termData->key ), $termData->meta[0] ];
				};

				// $get :: [metakeys] → [[fieldId, $fieldVal]]
				$get = pipe(
					Fns::map( $getMeta( $term->term_taxonomy_id ) ),
					Fns::filter( $hasMeta ),
					Fns::map( $makeField )
				);

				return $get( $termMetaKeysToTranslate );
			}
		);

		// $getAll :: [WP_Term] → [[fieldId, fieldVal]]
		$getAll = Fns::converge( Lst::concat(), [ $getTermFields, $getTermMetaFields( $termMetaKeysToTranslate ) ] );

		return wpml_collect( $sitepress->get_translatable_taxonomies( false, $post->post_type ) ) // [taxonomies]
			->map( Post::getTerms( $post->ID ) ) // [Either false|WP_Error [WP_Term]]
			->filter( Fns::isRight() ) // [Right[WP_Term]]
			->map( invoke( 'get' ) ) // [[WP_Term]]
			->flatten() // [WP_Term]
			->map( $getAll ) // [[fieldId, fieldVal]]
			->mapWithKeys( Lst::fromPairs() ) // [fieldId => fieldVal]
			->toArray();
	}

4. Ouvrez ensuite le fichier \WPML\TM\Jobs\TermMeta::geRegularTermMeta in \wp-content\plugins\sitepress-multilingual-cms\classes\translation-jobs\TermMeta.php
5. Remplacez la fonctiongeRegularTermMeta ligne 75

	private static function geRegularTermMeta( $iclTranslateJobId, $termTaxonomyId ) {
		global $wpdb;

		$sql = "SELECT field_data_translated, field_type
				FROM {$wpdb->prefix}icl_translate
				WHERE job_id = %d AND field_type LIKE 'tfield-%-%d'";

		$rowset = $wpdb->get_results( $wpdb->prepare( $sql, $iclTranslateJobId, $termTaxonomyId ) );

		return Fns::map( Obj::over( Obj::lensProp( 'field_data_translated' ), 'base64_decode' ), $rowset );
	}

Par ceci:

	private static function geRegularTermMeta( $iclTranslateJobId, $termTaxonomyId ) {
		global $wpdb;

		$sql = "SELECT field_data_translated, field_type
				FROM {$wpdb->prefix}icl_translate
				WHERE job_id = %d AND field_type LIKE 'tfield-%-%d'";
//start of the workaround
		$termTaxonomyId = $wpdb->get_var( $wpdb->prepare( "SELECT term_id FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id = %d", $termTaxonomyId ) ); 
		//change the $termTaxonomyId to the term id
		$rowset = $wpdb->get_results( $wpdb->prepare( $sql, $iclTranslateJobId, $termTaxonomyId ) );

		return Fns::map( Obj::over( Obj::lensProp( 'field_data_translated' ), 'base64_decode' ), $rowset );
	}
Septembre 21, 2023 à 3:01 pm #14440667

nicolasF-24

Super merci je vais tester ca !

Septembre 21, 2023 à 5:06 pm #14441301

Nicolas V.
Supporter

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

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

Bonjour,

D'accord, je laisse le ticket en attente de votre feedback. Tenez moi informé car il s'agit ici d'un bug reporté aux développeurs, donc toute information est utile.

Septembre 21, 2023 à 7:39 pm #14442139

nicolasF-24

Alors du coup j'ai repris les catégories que je t'avais dit plus haut avec ce problème, j'ai relancé l'ATE sur le produit serviette, voir déjà si je voyais la extra description, mais non toujours rien ...

Septembre 22, 2023 à 3:13 pm #14447699

Nicolas V.
Supporter

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

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

Bonjour,

D'accord, je vais tester moi même et si cela ne fonctionne pas je ferai à nouveau remonter au deuxième niveau

Septembre 22, 2023 à 4:30 pm #14448161

Nicolas V.
Supporter

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

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

Bonjour,

Alors la solution d'appoint résout bien le problème puisque le champ "description extra" est maintenant présent dans notre éditeur de traduction avancé (ATE) mais cette nouvelle traduction n'était pas publiée.

Son statut était "traduction complétée, non délivrée". J'ai nettoyé les travaux en cours et j'ai synchronisé les job IDs. Les traductions fonctionnement maintenant correctement et sont publiées.

Voici la vidéo de mon intervention: lien caché

Septembre 22, 2023 à 7:12 pm #14448937

nicolasF-24

Merci beaucoup pour la vidéo !

Je comprends mieux pourquoi je ne l'avais pas

J'ai donc créé un nouveau produit pour les catégories manquantes, je lui ai associé ces dites catégories et ca a fonctionné parfaitement !!!

Merci beaucoup pour votre aide