4 * Class WPML_User_Options_Menu
5 * Renders the WPML UI elements on the WordPress user profile edit screen
7 class WPML_User_Options_Menu {
9 /** @var WP_User $this ->current_user */
10 private $current_user;
15 private $user_language;
19 private $user_admin_def_lang;
23 private $lang_details;
27 private $admin_default_language;
31 private $admin_language;
35 private $all_languages;
38 * WPML_User_Options_Menu constructor.
40 * @param SitePress $sitepress
41 * @param WP_User $current_user
43 public function __construct( SitePress $sitepress, WP_User $current_user ) {
44 $this->sitepress = $sitepress;
45 $this->current_user = $current_user;
46 $this->user_language = $this->sitepress->get_wp_api()->get_user_meta( $this->current_user->ID, 'icl_admin_language', true );
47 $this->user_admin_def_lang = $this->sitepress->get_setting( 'admin_default_language' );
48 $this->user_admin_def_lang = $this->user_admin_def_lang === '_default_' ? $this->sitepress->get_default_language() : $this->user_admin_def_lang;
49 $this->lang_details = $this->sitepress->get_language_details( $this->user_admin_def_lang );
50 $this->admin_default_language = $this->lang_details['display_name'];
51 $this->admin_language = $this->sitepress->get_admin_language();
53 $user_language_for_all_languages = $this->user_admin_def_lang;
54 if ( $this->user_language ) {
55 $user_language_for_all_languages = $this->user_language;
57 $this->all_languages = $this->sitepress->get_languages( $user_language_for_all_languages );
61 * @return string the html for the user profile edit screen element WPML
64 public function render() {
65 $wp_api = $this->sitepress->get_wp_api();
66 $hide_wpml_languages = $wp_api->version_compare_naked( get_bloginfo( 'version' ), '4.7', '>=' ) ? 'style="display: none"' : '';
69 $admin_default_language_selected = $this->user_language === $this->user_admin_def_lang;
71 <tr class="user-language-wrap">
72 <th colspan="2"><h3><a name="wpml"></a><?php esc_html_e( 'WPML language settings', 'sitepress' ); ?></h3></th>
74 <tr class="user-language-wrap" <?php echo $hide_wpml_languages; ?>>
75 <th><label for="icl_user_admin_language"><?php esc_html_e( 'Select your language:', 'sitepress' ); ?></label></th>
77 <select id="icl_user_admin_language" name="icl_user_admin_language">
78 <option value=""<?php selected( true, $admin_default_language_selected ); ?>>
79 <?php echo esc_html( sprintf( __( 'Default admin language (currently %s)', 'sitepress' ), $this->admin_default_language ) ); ?>
82 foreach ( array( true, false ) as $active ) {
83 foreach ( (array) $this->all_languages as $lang_code => $al ) {
84 if ( (bool) $al['active'] === $active ) {
85 $current_language_selected = $this->user_language === $lang_code;
87 $language_name = $al['display_name'];
88 if ( $this->admin_language !== $lang_code ) {
89 $language_name .= ' (' . $al['native_name'] . ')';
92 <option value="<?php echo esc_attr( $lang_code ); ?>"<?php selected( true, $current_language_selected ); ?>>
93 <?php echo esc_html( $language_name ); ?>
100 $use_admin_language_for_edit = $wp_api->get_user_meta( $this->current_user->ID, 'icl_admin_language_for_edit', true )
103 <span class="description">
104 <?php esc_html_e( 'this will be your admin language and will also be used for translating comments.', 'sitepress' ); ?>
109 $this->get_hidden_languages_options( $use_admin_language_for_edit );
111 do_action( 'wpml_user_profile_options', $this->current_user->ID );
113 return ob_get_clean();
117 * @param bool $use_admin_language_for_edit
119 private function get_hidden_languages_options( $use_admin_language_for_edit ) {
122 * Filters a condition if current user can see hidden languages options in profile settings
124 * @params bool $show_hidden_languages_options
126 $show_hidden_languages_options = apply_filters(
127 'wpml_show_hidden_languages_options',
128 current_user_can( 'manage_options' )
131 if ( $show_hidden_languages_options ) {
132 $hidden_languages = $this->sitepress->get_setting( 'hidden_languages' );
133 $display_hidden_languages = get_user_meta( $this->current_user->ID, 'icl_show_hidden_languages', true );
136 <tr class="user-language-wrap">
137 <th><?php esc_html_e( 'Editing language:', 'sitepress' ); ?></th>
139 <input type="checkbox" name="icl_admin_language_for_edit" id="icl_admin_language_for_edit" value="1" <?php checked( true, $use_admin_language_for_edit ); ?> />
140 <label for="icl_admin_language_for_edit"><?php esc_html_e( 'Set admin language as editing language.', 'sitepress' ); ?></label>
144 <tr class="user-language-wrap">
145 <th><?php esc_html_e( 'Hidden languages:', 'sitepress' ); ?></th>
149 if ( ! empty( $hidden_languages ) ) {
150 if ( 1 === count( $hidden_languages ) ) {
151 echo esc_html( sprintf( __( '%s is currently hidden to visitors.', 'sitepress' ), $this->all_languages[ end( $hidden_languages ) ]['display_name'] ) );
153 $hidden_languages_array = array();
154 foreach ( (array) $hidden_languages as $l ) {
155 $hidden_languages_array[] = $this->all_languages[ $l ]['display_name'];
157 $hidden_languages = implode( ', ', $hidden_languages_array );
158 echo esc_html( sprintf( __( '%s are currently hidden to visitors.', 'sitepress' ), $hidden_languages ) );
161 esc_html_e( 'All languages are currently displayed. Choose what to do when site languages are hidden.', 'sitepress' );
166 <input id="icl_show_hidden_languages" name="icl_show_hidden_languages" type="checkbox" value="1" <?php checked( true, $display_hidden_languages ); ?> />
167 <label for="icl_show_hidden_languages"><?php esc_html_e( 'Display hidden languages', 'sitepress' ); ?></label>