| Server IP : 78.24.162.143 / Your IP : 216.73.217.70 Web Server : Apache System : Linux hosting.cormo.systems 5.15.0-179-generic #189-Ubuntu SMP Tue May 5 18:20:56 UTC 2026 x86_64 User : web63 ( 5058) PHP Version : 7.4.33 Disable Function : create_functions,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/clients/client34/web63/web/wp-content/plugins/pods/src/Pods/Integrations/ |
Upload File : |
<?php
namespace Pods\Integrations;
use Pods\Integration;
/**
* Class WPML
*
* @since 2.8.0
*/
class WPML extends Integration {
/**
* @inheritdoc
*/
protected $hooks = [
'action' => [
'wpml_language_has_switched' => [ 'wpml_language_has_switched' ],
],
'filter' => [
'pods_get_current_language' => [ 'pods_get_current_language', 10, 2 ],
'pods_api_get_table_info' => [ 'pods_api_get_table_info', 10, 7 ],
'pods_data_traverse_recurse_ignore_aliases' => [ 'pods_data_traverse_recurse_ignore_aliases', 10 ],
'pods_pods_field_get_metadata_object_id' => [ 'pods_pods_field_get_metadata_object_id', 10, 4 ],
'pods_component_i18n_admin_data' => [ 'pods_component_i18n_admin_data' ],
'pods_component_i18n_admin_ui_fields' => [ 'pods_component_i18n_admin_ui_fields', 10, 2 ],
'pods_var_post_id' => [ 'pods_var_post_id' ],
],
];
/**
* @inheritDoc
*/
public static function is_active() {
return defined( 'ICL_SITEPRESS_VERSION' ) || ! empty( $GLOBALS['sitepress'] );
}
/**
* Refresh language cache after WPML has switch language.
*
* @since 2.8.11
*
* @see \SitePress::switch_lang()
*
* @return void
*/
public function wpml_language_has_switched() {
pods_i18n()->get_current_language( array( 'refresh' => true ) );
}
/**
* @since 2.8.2
*
* @param int $id
*
* @return mixed|void
*/
public function pods_var_post_id( $id ) {
return apply_filters( 'wpml_object_id', $id, get_post_type( $id ), true );
}
/**
* @since 2.8.0
*
* @param array $ignore_aliases
*
* @return array
*/
public function pods_data_traverse_recurse_ignore_aliases( $ignore_aliases ) {
$ignore_aliases[] = 'wpml_languages';
return $ignore_aliases;
}
/**
* Get the current language.
*
* @since 2.8.0
*
* @param string $current_language
* @param array $context
*
* @return string
*/
public function pods_get_current_language( $current_language, $context ) {
// Get the global current language (if set).
$wpml_language = apply_filters( 'wpml_current_language', null );
$current_language = ( 'all' !== $wpml_language ) ? $wpml_language : '';
if ( ! is_admin() ) {
return $current_language;
}
$defaults = [
'is_admin' => is_admin(),
'is_ajax' => null,
'is_pods_ajax' => null,
'current_page' => '',
'current_object_type' => '',
'current_item_id' => '',
'current_item_type' => '',
];
$context = wp_parse_args( $context, $defaults );
$object_type = $context['current_object_type'];
$item_type = $context['current_item_type'];
if ( ! $item_type ) {
return $current_language;
}
/**
* In WPML the current language is always set to default on an edit screen.
* We need to overwrite this when the current object is not-translatable to enable relationships with different languages.
*/
switch ( $object_type ) {
case 'post':
if ( ! $this->is_translated_post_type( $item_type ) ) {
// Overwrite the current language to nothing if this is a NOT-translatable post_type.
$current_language = '';
}
break;
case 'term':
if ( ! $this->is_translated_taxonomy( $item_type ) ) {
// Overwrite the current language to nothing if this is a NOT-translatable taxonomy.
$current_language = '';
}
break;
case 'comment';
// @todo Get comment post parent??
//$current_language = '';
break;
}
return $current_language;
}
/**
* Support for WPML 'duplicated' translation handling.
*
* @param int $id
* @param string $metadata_type
* @param array $params
* @param array|\Pods $pod
*
* @return int
*/
public function pods_pods_field_get_metadata_object_id( $id, $metadata_type, $params, $pod ) {
if ( ! did_action( 'wpml_loaded' ) ) {
return $id;
}
switch ( $metadata_type ) {
case 'post':
if ( $this->is_translated_post_type( $pod->pod_data['name'] ) ) {
$master_post_id = (int) apply_filters( 'wpml_master_post_from_duplicate', $id );
if ( $master_post_id ) {
$id = $master_post_id;
}
}
break;
}
return $id;
}
/**
* Filter table info data.
*
* @since 2.8.0
*
* @param array $info
* @param string $object_type
* @param string $object
* @param string $name
* @param array|\Pods $pod
* @param array $field
* @param \PodsAPI $pods_api
*
* @return array
*/
public function pods_api_get_table_info( $info, $object_type, $object, $name, $pod, $field, $pods_api ) {
global $wpdb;
if ( ! apply_filters( 'wpml_setting', true, 'auto_adjust_ids' ) ) {
return $info;
}
// Get current language
$current_language = pods_i18n()->get_current_language();
if ( ! $current_language ) {
return $info;
}
$object_name = pods_sanitize( ( empty( $object ) ? $name : $object ) );
$db_prefix = $wpdb->get_blog_prefix();
$wpml_translations = false;
switch ( $object_type ) {
case 'post':
case 'post_type':
case 'media':
if ( $this->is_translated_post_type( $object_name ) ) {
$wpml_translations = "
LEFT JOIN `{$db_prefix}icl_translations` AS `wpml_translations`
ON `wpml_translations`.`element_id` = `t`.`ID`
AND `wpml_translations`.`element_type` = 'post_" . pods_sanitize( $object_name ) . "'
AND `wpml_translations`.`language_code` = '" . pods_sanitize( $current_language ) . "'
";
}
break;
case 'taxonomy':
case 'term':
case 'nav_menu':
case 'post_format':
if ( $this->is_translated_taxonomy( $object_name ) ) {
$wpml_translations = "
LEFT JOIN `{$db_prefix}icl_translations` AS `wpml_translations`
ON `wpml_translations`.`element_id` = `tt`.`term_taxonomy_id`
AND `wpml_translations`.`element_type` = 'tax_" . pods_sanitize( $object_name ) . "'
AND `wpml_translations`.`language_code` = '" . pods_sanitize( $current_language ) . "'
";
}
break;
}
if ( $wpml_translations ) {
$info['join']['wpml_translations'] = $wpml_translations;
$info['join']['wpml_languages'] = "
LEFT JOIN `{$db_prefix}icl_languages` AS `wpml_languages`
ON `wpml_languages`.`code` = `wpml_translations`.`language_code` AND `wpml_languages`.`active` = 1
";
$info['where']['wpml_languages'] = "`wpml_languages`.`code` IS NOT NULL";
}
return $info;
}
/**
* @param array $data
*
* @return array
*/
public function pods_component_i18n_admin_data( $data ) {
foreach ( $data as $lang => $field_data ) {
if ( in_array( $lang, $this->get_locales(), true ) ) {
$data[ $lang ]['wpml'] = true;
} else {
$data[ $lang ]['wpml'] = false;
}
}
return $data;
}
/**
* @param array $fields
* @param array $data
*
* @return array
*/
public function pods_component_i18n_admin_ui_fields( $fields, $data ) {
$fields['manage']['wpml'] = array(
'label' => __( 'WPML', 'pods' ),
'type' => 'boolean',
);
return $fields;
}
/**
* Helper method for backwards compatibility.
*
* @since 2.8.0
*
* @param string $object_name
*
* @return false|mixed|void
*/
public function is_translated_post_type( $object_name ) {
global $sitepress;
if ( has_filter( 'wpml_is_translated_post_type' ) ) {
return apply_filters( 'wpml_is_translated_post_type', false, $object_name );
} elseif ( is_callable( [ $sitepress, 'is_translated_post_type' ] ) ) {
return $sitepress->is_translated_post_type( $object_name );
}
return false;
}
/**
* Helper method for backwards compatibility.
*
* @since 2.8.0
*
* @param string $object_name
*
* @return false|mixed|void
*/
public function is_translated_taxonomy( $object_name ) {
global $sitepress;
if ( has_filter( 'wpml_is_translated_taxonomy' ) ) {
return apply_filters( 'wpml_is_translated_taxonomy', false, $object_name );
} elseif ( is_callable( [ $sitepress, 'is_translated_taxonomy' ] ) ) {
return $sitepress->is_translated_taxonomy( $object_name );
}
return false;
}
/**
* @return array
*/
public function get_language( $locale ) {
$languages = $this->get_languages();
$language = null;
if ( ! empty( $languages ) ) {
foreach ( $languages as $lang => $lang_data ) {
if ( isset( $lang_data['default_locale'] ) && $locale === $lang_data['default_locale'] ) {
$language = $lang_data;
break;
}
}
}
return $language;
}
/**
* @return string[]
*/
public function get_locales() {
$languages = $this->get_languages();
$locales = [];
if ( ! empty( $languages ) ) {
foreach ( $languages as $lang => $lang_data ) {
if ( isset( $lang_data['default_locale'] ) ) {
$locales[] = $lang_data['default_locale'];;
}
}
}
return $locales;
}
/**
* @return array
*/
public function get_languages() {
return apply_filters( 'wpml_active_languages', array() );
}
}