HEX
Server: LiteSpeed
System: Linux server315.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User: globfdxw (6114)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: //home/globfdxw/public_html/wp-content/plugins/acfml/classes/FieldPreferences/TranslationJobs.php
<?php

namespace ACFML\FieldPreferences;

class TranslationJobs implements \IWPML_Backend_Action, \IWPML_Frontend_Action, \IWPML_DIC_Action {

	const TR_JOB_FIELD_PATTERN = '/^field-(\S+)-[0-9]+$/';

	public function add_hooks() {
		add_filter( 'wpml_tm_job_field_is_translatable', [ $this, 'adjust_is_translatable_for_field_in_translation_job' ], 10, 2 );
	}

	/**
	 * WP filter hook to update $is_translatable to true when numeric values is being sent to translation and it is
	 * ACF field's value.
	 *
	 * @param bool  $is_translatable  if field should be displayed in Translation Editor.
	 * @param array $job_translate    translation job details.
	 *
	 * @return bool
	 */
	public function adjust_is_translatable_for_field_in_translation_job( $is_translatable, $job_translate ) {
		/*
		 * Numeric fields are set as not translatable in translation jobs
		 * but with ACF you can create fields with numeric value which actually you would like
		 * to translate. This filter is to check if field comes from ACF and then set it as translatable
		 */
		if ( ! $is_translatable && isset( $job_translate['field_type'] ) ) {
			if ( $this->is_acf_field( $job_translate ) ) {
				$is_translatable = true;
			}
		}

		return $is_translatable;
	}

	/**
	 * @param array $job_translate Translation Job data.
	 *
	 * @return bool
	 */
	private function is_acf_field( $job_translate ) {
		return preg_match( self::TR_JOB_FIELD_PATTERN, $job_translate['field_type'], $matches ) && (bool) acf_get_field( $matches[1] );
	}
}