PluginProbe
Polylang / 2.9.2
Polylang v2.9.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
polylang / include / widget-languages.php

widget-languages.php in Polylang 2.9.2, at include/widget-languages.php

135 lines 4.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package Polylang
4 */
5
6 /**
7 * The language switcher widget
8 *
9 * @since 0.1
10 */
11 class PLL_Widget_Languages extends WP_Widget {
12
13 /**
14 * Constructor
15 *
16 * @since 0.1
17 */
18 public function __construct() {
19 parent::__construct(
20 'polylang',
21 __( 'Language switcher', 'polylang' ),
22 array(
23 'description' => __( 'Displays a language switcher', 'polylang' ),
24 'customize_selective_refresh' => true,
25 )
26 );
27 }
28
29 /**
30 * Displays the widget
31 *
32 * @since 0.1
33 *
34 * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget.
35 * @param array $instance The settings for the particular instance of the widget
36 */
37 public function widget( $args, $instance ) {
38 // Sets a unique id for dropdown.
39 $instance['dropdown'] = empty( $instance['dropdown'] ) ? 0 : $args['widget_id'];
40
41 if ( $list = pll_the_languages( array_merge( $instance, array( 'echo' => 0 ) ) ) ) {
42 $title = empty( $instance['title'] ) ? '' : $instance['title'];
43
44 /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
45 $title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
46
47 echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput
48
49 if ( $title ) {
50 echo $args['before_title'] . $title . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput
51 }
52
53 // The title may be filtered: Strip out HTML and make sure the aria-label is never empty.
54 $aria_label = trim( wp_strip_all_tags( $title ) );
55 if ( ! $aria_label ) {
56 $aria_label = __( 'Choose a language', 'polylang' );
57 }
58
59 if ( $instance['dropdown'] ) {
60 echo '<label class="screen-reader-text" for="' . esc_attr( 'lang_choice_' . $instance['dropdown'] ) . '">' . esc_html( $aria_label ) . '</label>';
61 echo $list; // phpcs:ignore WordPress.Security.EscapeOutput
62 } else {
63 $format = current_theme_supports( 'html5', 'navigation-widgets' ) ? 'html5' : 'xhtml';
64
65 /** This filter is documented in wp-includes/widgets/class-wp-nav-menu-widget.php */
66 $format = apply_filters( 'navigation_widgets_format', $format );
67
68 if ( 'html5' === $format ) {
69 echo '<nav role="navigation" aria-label="' . esc_attr( $aria_label ) . '">';
70 }
71
72 echo "<ul>\n" . $list . "</ul>\n"; // phpcs:ignore WordPress.Security.EscapeOutput
73
74 if ( 'html5' === $format ) {
75 echo '</nav>';
76 }
77 }
78
79 echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput
80 }
81 }
82
83 /**
84 * Updates the widget options
85 *
86 * @since 0.4
87 *
88 * @param array $new_instance New settings for this instance as input by the user via form()
89 * @param array $old_instance Old settings for this instance
90 * @return array Settings to save or bool false to cancel saving
91 */
92 public function update( $new_instance, $old_instance ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
93 $instance = array( 'title' => sanitize_text_field( $new_instance['title'] ) );
94 foreach ( array_keys( PLL_Switcher::get_switcher_options( 'widget' ) ) as $key ) {
95 $instance[ $key ] = ! empty( $new_instance[ $key ] ) ? 1 : 0;
96 }
97
98 return $instance;
99 }
100
101 /**
102 * Displays the widget form
103 *
104 * @since 0.4
105 *
106 * @param array $instance Current settings
107 */
108 public function form( $instance ) {
109 // Default values
110 $instance = wp_parse_args( (array) $instance, array_merge( array( 'title' => '' ), PLL_Switcher::get_switcher_options( 'widget', 'default' ) ) );
111
112 // Title
113 printf(
114 '<p><label for="%1$s">%2$s</label><input class="widefat" id="%1$s" name="%3$s" type="text" value="%4$s" /></p>',
115 esc_attr( $this->get_field_id( 'title' ) ),
116 esc_html__( 'Title:', 'polylang' ),
117 esc_attr( $this->get_field_name( 'title' ) ),
118 esc_attr( $instance['title'] )
119 );
120
121 foreach ( PLL_Switcher::get_switcher_options( 'widget' ) as $key => $str ) {
122 printf(
123 '<div%5$s%6$s><input type="checkbox" class="checkbox %7$s" id="%1$s" name="%2$s"%3$s /><label for="%1$s">%4$s</label></div>',
124 esc_attr( $this->get_field_id( $key ) ),
125 esc_attr( $this->get_field_name( $key ) ),
126 checked( $instance[ $key ], true, false ),
127 esc_html( $str ),
128 in_array( $key, array( 'show_names', 'show_flags', 'hide_current' ) ) ? sprintf( ' class="no-dropdown-%s"', esc_attr( $this->id ) ) : '',
129 ( ! empty( $instance['dropdown'] ) && in_array( $key, array( 'show_names', 'show_flags', 'hide_current' ) ) ? ' style="display:none;"' : '' ),
130 esc_attr( 'pll-' . $key )
131 );
132 }
133 }
134 }
135