Я видел, что CMB2 предлагает возможность создать пользовательскую функцию очистки, с помощью которой значения проверяются перед их вставкой в базу данных.Поэтому я установил параметр sanitization_cb
в метаполе следующим образом:
$cmb->add_field( array(
'name' => esc_html__( 'My Photo', 'mydomain' ),
'id' => 'benny-file-list',
'type' => 'file_list',
'preview_size' => array( 100, 100 ),
'text' => array(
'add_upload_files_text' => esc_html__( 'Add Photos', 'mydomain' ),
'remove_image_text' => esc_html__( 'Remove Photo', 'mydomain' ),
'file_text' => esc_html__( 'Photo:', 'mydomain' ),
'file_download_text' => esc_html__( 'Download', 'mydomain' ),
'remove_text' => esc_html__( 'Remove', 'mydomain' )
),
'sanitization_cb' => 'benny_cmb_sanitize_file_list'
) );
Затем я создал функцию обратного вызова для очистки, чтобы проверить, соответствует ли язык загруженного вложения языку публикации;если он не совпадает, он ищет идентификатор перевода и, если он был переведен, он заменяет его:
function benny_cmb_sanitize_file_list( $value, $field_args, $field ) {
if ( ! function_exists( 'icl_object_id' ) )
return $value;
if ( empty( $value ) )
return $value;
$main_lang = apply_filters( 'wpml_default_language', NULL );
$post_id = $field->object_id;
$post_lang = apply_filters( 'wpml_post_language_details', NULL, $post_id );
$post_lang = $post_lang[ 'language_code' ];
if ( $post_lang == $main_lang )
return $value;
$photo = $value;
$trad_photo = array();
foreach ( $photo as $id => $url ) {
$photo_lang = apply_filters( 'wpml_post_language_details', NULL, $id );
$photo_lang = $photo_lang[ 'language_code' ];
$post_type = get_post_type( $id );
if ( $photo_lang !== $post_lang ) {
$trad_id = apply_filters( 'wpml_object_id', $id, $post_type, FALSE, $post_lang );
if ( ! empty( $trad_id ) ) {
$trad_photo[ $trad_id ] = $url;
}
}
}
if ( ! empty( $trad_photo ) ) {
return $trad_photo;
}
return $value;
}
Теперь он отлично работает, и во внешнем интерфейсе я визуализирую атрибуты изображения (название,alt и т. д.) на правильном языке.
PS Я не знаю, правильная ли это методология или самая красивая форма, я открыт для каждого отзыва:)