class-wpml-translate-link-targets-in-custom-fields.php
3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
class WPML_Translate_Link_Targets_In_Custom_Fields extends WPML_Translate_Link_Targets {
/* @var TranslationManagement $tm_instance */
private $tm_instance;
/* @var WPML_WP_API $wp_api */
private $wp_api;
/* @var array $meta_keys */
private $meta_keys;
/**
* WPML_Translate_Link_Targets_In_Custom_Fields constructor.
*
* @param TranslationManagement $tm_instance
* @param WPML_WP_API $wp_api
* @param AbsoluteLinks $absolute_links
* @param WPML_Absolute_To_Permalinks $permalinks_converter
*/
public function __construct( &$tm_instance, &$wp_api, $absolute_links, $permalinks_converter ) {
parent::__construct( $absolute_links, $permalinks_converter );
$this->tm_instance = &$tm_instance;
$this->wp_api = &$wp_api;
$this->tm_instance->load_settings_if_required();
if ( isset( $this->tm_instance->settings['custom_fields_translate_link_target'] ) &&
! empty( $this->tm_instance->settings['custom_fields_translate_link_target'] ) ) {
$this->meta_keys = $this->tm_instance->settings['custom_fields_translate_link_target'];
}
}
public function has_meta_keys() {
return (bool) $this->meta_keys;
}
/**
* maybe_translate_link_targets
*
* @param string|array $metadata - Always null for post metadata.
* @param int $object_id - Post ID for post metadata
* @param string $meta_key - metadata key.
* @param bool $single - Indicates if processing only a single $metadata value or array of values.
*
* @return string|array Original or Modified $metadata.
*/
public function maybe_translate_link_targets( $metadata, $object_id, $meta_key, $single ) {
if ( array_key_exists( $meta_key, $this->meta_keys ) ) {
$custom_field_setting = new WPML_Post_Custom_Field_Setting( $this->tm_instance, $meta_key );
if ( $custom_field_setting->is_translate_link_target() ) {
$sub_fields = $custom_field_setting->get_translate_link_target_sub_fields();
$this->wp_api->remove_filter( 'get_post_metadata', array( $this, 'maybe_translate_link_targets' ), 10 );
$metadata_raw = maybe_unserialize( $this->wp_api->get_post_meta( $object_id, $meta_key, $single ) );
$this->wp_api->add_filter( 'get_post_metadata', array( $this, 'maybe_translate_link_targets' ), 10, 4 );
if ( $metadata_raw ) {
if ( $single ) {
$metadata_raw = array( $metadata_raw );
}
foreach ( $metadata_raw as $index => $metadata ) {
if ( ! empty( $sub_fields ) ) {
$metadata = $this->convert_sub_fields( $sub_fields, $metadata );
} else {
$metadata = $this->convert_text( $metadata );
}
$metadata_raw[ $index ] = $metadata;
}
if ( $single && ! is_array( $metadata_raw[0] ) ) {
$metadata_raw = $metadata_raw[0];
}
}
$metadata = $metadata_raw;
}
}
return $metadata;
}
private function convert_sub_fields( $sub_fields, $metadata ) {
foreach ( $sub_fields as $sub_field ) {
if ( isset( $sub_field['value'], $sub_field['attr']['translate_link_target'] ) && $sub_field['attr']['translate_link_target'] ) {
$key = trim( $sub_field['value'] );
if ( isset( $metadata[ $key ] ) ) {
$metadata[ $key ] = $this->convert_text( $metadata[ $key ] );
}
}
}
return $metadata;
}
}