PluginProbe
Polylang / 2.5.2
Polylang v2.5.2
3.8.9 3.8.8 3.8.7 3.8.6 3.8.5 3.8.4 3.8.3 2.7 2.7.0.1 2.7.1 2.7.2 2.7.3 2.7.4 2.8 2.8.1 2.8.2 2.8.3 2.8.4 2.9 2.9.1 2.9.2 3.0 3.0.1 3.0.2 3.0.3 All 233 releases
← All changes | include/switcher.php +14 -15 2.7.22.5.2 View file →
@@ -18,9 +18,9 @@
18 18 * @return array list of switcher options strings or default values
19 19 */
20 20 public static function get_switcher_options( $type = 'widget', $key = 'string' ) {
21 21 $options = array(
22 - 'dropdown' => array( 'string' => __( 'Displays as a dropdown', 'polylang' ), 'default' => 0 ),
22 + 'dropdown' => array( 'string' => __( 'Displays as dropdown', 'polylang' ), 'default' => 0 ),
23 23 'show_names' => array( 'string' => __( 'Displays language names', 'polylang' ), 'default' => 1 ),
24 24 'show_flags' => array( 'string' => __( 'Displays flags', 'polylang' ), 'default' => 0 ),
25 25 'force_home' => array( 'string' => __( 'Forces link to front page', 'polylang' ), 'default' => 0 ),
26 26 'hide_current' => array( 'string' => __( 'Hides the current language', 'polylang' ), 'default' => 0 ),
@@ -41,10 +41,10 @@
41 41 * @param array $args
42 42 * @return array
43 43 */
44 44 protected function get_elements( $links, $args ) {
45 +
45 46 $first = true;
46 - $out = array();
47 47
48 48 foreach ( $links->model->get_languages_list( array( 'hide_empty' => $args['hide_if_empty'] ) ) as $language ) {
49 49 $id = (int) $language->term_id;
50 50 $order = (int) $language->term_group;
@@ -52,17 +52,23 @@
52 52 $locale = $language->get_locale( 'display' );
53 53 $classes = array( 'lang-item', 'lang-item-' . $id, 'lang-item-' . esc_attr( $slug ) );
54 54 $url = null; // Avoids potential notice
55 55
56 + if ( $first ) {
57 + $classes[] = 'lang-item-first';
58 + $first = false;
59 + }
60 +
56 61 if ( $current_lang = $links->curlang->slug == $slug ) {
57 62 if ( $args['hide_current'] && ! ( $args['dropdown'] && ! $args['raw'] ) ) {
58 63 continue; // Hide current language except for dropdown
59 - } else {
64 + }
65 + else {
60 66 $classes[] = 'current-lang';
61 67 }
62 68 }
63 69
64 - if ( null !== $args['post_id'] && ( $tr_id = $links->model->post->get( $args['post_id'], $language ) ) && $links->model->post->current_user_can_read( $tr_id ) ) {
70 + if ( null !== $args['post_id'] && ( $tr_id = $links->model->post->get( $args['post_id'], $language ) ) && $links->current_user_can_read( $tr_id ) ) {
65 71 $url = get_permalink( $tr_id );
66 72 } elseif ( null === $args['post_id'] ) {
67 73 $url = $links->get_translation_url( $language );
68 74 }
@@ -91,17 +97,12 @@
91 97
92 98 $name = $args['show_names'] || ! $args['show_flags'] || $args['raw'] ? ( 'slug' == $args['display_names_as'] ? $slug : $language->name ) : '';
93 99 $flag = $args['raw'] && ! $args['show_flags'] ? $language->flag_url : ( $args['show_flags'] ? $language->flag : '' );
94 100
95 - if ( $first ) {
96 - $classes[] = 'lang-item-first';
97 - $first = false;
98 - }
99 -
100 101 $out[ $slug ] = compact( 'id', 'order', 'slug', 'locale', 'name', 'url', 'flag', 'current_lang', 'no_translation', 'classes' );
101 102 }
102 103
103 - return $out;
104 + return empty( $out ) ? array() : $out;
104 105 }
105 106
106 107 /**
107 108 * Displays a language switcher
@@ -182,14 +183,12 @@
182 183 *
183 184 * @param string $html html returned/outputted by the template tag
184 185 * @param array $args arguments passed to the template tag
185 186 */
186 - $out = apply_filters( 'pll_the_languages', $walker->walk( $elements, -1, $args ), $args );
187 + $out = apply_filters( 'pll_the_languages', $walker->walk( $elements, $args ), $args );
187 188
188 189 // Javascript to switch the language when using a dropdown list
189 190 if ( $args['dropdown'] ) {
190 - $urls = array();
191 -
192 191 foreach ( $links->model->get_languages_list() as $language ) {
193 192 $url = $links->get_translation_url( $language );
194 193 $urls[ $language->slug ] = $args['force_home'] || empty( $url ) ? $links->get_home_url( $language ) : $url;
195 194 }
@@ -204,15 +203,15 @@
204 203 }
205 204 //]]>
206 205 </script>',
207 206 'urls_' . preg_replace( '#[^a-zA-Z0-9]#', '', $args['dropdown'] ),
208 - wp_json_encode( $urls ),
207 + json_encode( $urls ),
209 208 esc_js( $args['name'] )
210 209 );
211 210 }
212 211
213 212 if ( $args['echo'] ) {
214 - echo $out; // phpcs:ignore WordPress.Security.EscapeOutput
213 + echo $out;
215 214 }
216 215 return $out;
217 216 }
218 217 }