run:R W Run
DIR
2026-03-11 16:18:51
R W Run
DIR
2026-03-11 16:18:52
R W Run
DIR
2026-03-11 16:18:51
R W Run
DIR
2026-03-11 16:18:52
R W Run
DIR
2026-03-11 16:18:52
R W Run
DIR
2026-03-11 16:18:51
R W Run
DIR
2026-03-11 16:18:51
R W Run
DIR
2026-03-11 16:18:51
R W Run
DIR
2026-03-11 16:18:51
R W Run
DIR
2026-03-11 16:18:52
R W Run
DIR
2026-03-11 16:18:52
R W Run
DIR
2026-03-11 16:18:52
R W Run
DIR
2026-03-11 16:18:51
R W Run
DIR
2026-03-11 16:18:52
R W Run
DIR
2026-03-11 16:18:52
R W Run
DIR
2026-03-11 16:18:51
R W Run
DIR
2026-03-11 16:18:52
R W Run
DIR
2026-03-11 16:18:51
R W Run
DIR
2026-03-11 16:18:51
R W Run
DIR
2026-03-11 16:18:51
R W Run
DIR
2026-03-11 16:18:52
R W Run
DIR
2026-03-11 16:18:52
R W Run
DIR
2026-03-11 16:18:52
R W Run
DIR
2026-03-11 16:18:52
R W Run
DIR
2026-03-11 16:18:51
R W Run
DIR
2026-03-11 16:18:52
R W Run
DIR
2026-03-11 16:18:52
R W Run
DIR
2026-03-11 16:18:51
R W Run
DIR
2026-03-11 16:18:51
R W Run
23.8 KB
2026-03-11 16:18:51
R W Run
7.8 KB
2026-03-11 16:18:52
R W Run
36.1 KB
2026-03-11 16:18:51
R W Run
11.9 KB
2026-03-11 16:18:52
R W Run
18.94 KB
2026-03-11 16:18:52
R W Run
7.35 KB
2026-03-11 16:18:52
R W Run
28.6 KB
2026-03-11 16:18:51
R W Run
316 By
2026-03-11 16:18:51
R W Run
12.9 KB
2026-03-11 16:18:51
R W Run
61.02 KB
2026-03-11 16:18:52
R W Run
15 KB
2026-03-11 16:18:51
R W Run
112.05 KB
2026-03-11 16:18:51
R W Run
12.47 KB
2026-03-11 16:18:51
R W Run
15.07 KB
2026-03-11 16:18:52
R W Run
9.84 KB
2026-03-11 16:18:52
R W Run
13.17 KB
2026-03-11 16:18:52
R W Run
33.83 KB
2026-03-11 16:18:51
R W Run
42.63 KB
2026-03-11 16:18:51
R W Run
55.71 KB
2026-03-11 16:18:52
R W Run
12.53 KB
2026-03-11 16:18:51
R W Run
2.55 KB
2026-03-11 16:18:52
R W Run
28.92 KB
2026-03-11 16:18:52
R W Run
539 By
2026-03-11 16:18:51
R W Run
367 By
2026-03-11 16:18:52
R W Run
42.65 KB
2026-03-11 16:18:51
R W Run
401 By
2026-03-11 16:18:51
R W Run
6.61 KB
2026-03-11 16:18:51
R W Run
664 By
2026-03-11 16:18:52
R W Run
20.63 KB
2026-03-11 16:18:51
R W Run
2.18 KB
2026-03-11 16:18:52
R W Run
453 By
2026-03-11 16:18:52
R W Run
457 By
2026-03-11 16:18:51
R W Run
36.83 KB
2026-03-11 16:18:52
R W Run
2.41 KB
2026-03-11 16:18:52
R W Run
8.28 KB
2026-03-11 16:18:51
R W Run
13.89 KB
2026-03-11 16:18:51
R W Run
11.76 KB
2026-03-11 16:18:51
R W Run
2.65 KB
2026-03-11 16:18:51
R W Run
7.43 KB
2026-03-11 16:18:51
R W Run
17.46 KB
2026-03-11 16:18:51
R W Run
5.14 KB
2026-03-11 16:18:52
R W Run
16.7 KB
2026-03-11 16:18:51
R W Run
8.28 KB
2026-03-11 16:18:52
R W Run
2.92 KB
2026-03-11 16:18:52
R W Run
1.32 KB
2026-03-11 16:18:51
R W Run
4.6 KB
2026-03-11 16:18:52
R W Run
11.62 KB
2026-03-11 16:18:52
R W Run
2.5 KB
2026-03-11 16:18:51
R W Run
1.97 KB
2026-03-11 16:18:51
R W Run
11.25 KB
2026-03-11 16:18:52
R W Run
5.32 KB
2026-03-11 16:18:51
R W Run
10.99 KB
2026-03-11 16:18:52
R W Run
68.32 KB
2026-03-11 16:18:51
R W Run
6.34 KB
2026-03-11 16:18:51
R W Run
5.49 KB
2026-03-11 16:18:51
R W Run
1.99 KB
2026-03-11 16:18:52
R W Run
7.02 KB
2026-03-11 16:18:51
R W Run
4.91 KB
2026-03-11 16:18:52
R W Run
16.86 KB
2026-03-11 16:18:51
R W Run
24.23 KB
2026-03-11 16:18:51
R W Run
3.97 KB
2026-03-11 16:18:51
R W Run
47.66 KB
2026-03-11 16:18:51
R W Run
9.22 KB
2026-03-11 16:18:51
R W Run
25.51 KB
2026-03-11 16:18:51
R W Run
198.38 KB
2026-03-11 16:18:52
R W Run
56.65 KB
2026-03-11 16:18:51
R W Run
10.46 KB
2026-03-11 16:18:51
R W Run
10.95 KB
2026-03-11 16:18:52
R W Run
29.26 KB
2026-03-11 16:18:51
R W Run
70.91 KB
2026-03-11 16:18:52
R W Run
35.3 KB
2026-03-11 16:18:52
R W Run
16.61 KB
2026-03-11 16:18:52
R W Run
2.57 KB
2026-03-11 16:18:52
R W Run
39.83 KB
2026-03-11 16:18:51
R W Run
70.64 KB
2026-03-11 16:18:51
R W Run
15.56 KB
2026-03-11 16:18:52
R W Run
7.33 KB
2026-03-11 16:18:52
R W Run
253 By
2026-03-11 16:18:51
R W Run
7.96 KB
2026-03-11 16:18:52
R W Run
3.23 KB
2026-03-11 16:18:52
R W Run
969 By
2026-03-11 16:18:52
R W Run
16.28 KB
2026-03-11 16:18:51
R W Run
7.22 KB
2026-03-11 16:18:51
R W Run
12.95 KB
2026-03-11 16:18:51
R W Run
6.53 KB
2026-03-11 16:18:51
R W Run
3.42 KB
2026-03-11 16:18:52
R W Run
5.84 KB
2026-03-11 16:18:51
R W Run
1.97 KB
2026-03-11 16:18:51
R W Run
4.3 KB
2026-03-11 16:18:52
R W Run
2.91 KB
2026-03-11 16:18:51
R W Run
16.46 KB
2026-03-11 16:18:52
R W Run
40.6 KB
2026-03-11 16:18:51
R W Run
20.22 KB
2026-03-11 16:18:51
R W Run
36.11 KB
2026-03-11 16:18:52
R W Run
17.01 KB
2026-03-11 16:18:51
R W Run
7.27 KB
2026-03-11 16:18:52
R W Run
6.62 KB
2026-03-11 16:18:52
R W Run
16.49 KB
2026-03-11 16:18:52
R W Run
1.79 KB
2026-03-11 16:18:52
R W Run
29.82 KB
2026-03-11 16:18:51
R W Run
6.67 KB
2026-03-11 16:18:52
R W Run
8.98 KB
2026-03-11 16:18:52
R W Run
19.42 KB
2026-03-11 16:18:51
R W Run
12.01 KB
2026-03-11 16:18:51
R W Run
17.11 KB
2026-03-11 16:18:51
R W Run
6.74 KB
2026-03-11 16:18:52
R W Run
30.93 KB
2026-03-11 16:18:51
R W Run
4.99 KB
2026-03-11 16:18:51
R W Run
4.25 KB
2026-03-11 16:18:51
R W Run
24.72 KB
2026-03-11 16:18:51
R W Run
29.96 KB
2026-03-11 16:18:52
R W Run
6.41 KB
2026-03-11 16:18:51
R W Run
160 KB
2026-03-11 16:18:51
R W Run
6.72 KB
2026-03-11 16:18:52
R W Run
10.92 KB
2026-03-11 16:18:51
R W Run
4.77 KB
2026-03-11 16:18:51
R W Run
3.38 KB
2026-03-11 16:18:51
R W Run
11.18 KB
2026-03-11 16:18:51
R W Run
62.19 KB
2026-03-11 16:18:51
R W Run
2.46 KB
2026-03-11 16:18:51
R W Run
9.17 KB
2026-03-11 16:18:51
R W Run
32.15 KB
2026-03-11 16:18:51
R W Run
34.05 KB
2026-03-11 16:18:52
R W Run
7.15 KB
2026-03-11 16:18:51
R W Run
3.47 KB
2026-03-11 16:18:52
R W Run
1.87 KB
2026-03-11 16:18:52
R W Run
30.91 KB
2026-03-11 16:18:51
R W Run
7.29 KB
2026-03-11 16:18:52
R W Run
7.35 KB
2026-03-11 16:18:51
R W Run
12.54 KB
2026-03-11 16:18:51
R W Run
19.12 KB
2026-03-11 16:18:51
R W Run
18.12 KB
2026-03-11 16:18:52
R W Run
39.99 KB
2026-03-11 16:18:52
R W Run
5.17 KB
2026-03-11 16:18:52
R W Run
979 By
2026-03-11 16:18:51
R W Run
18.44 KB
2026-03-11 16:18:52
R W Run
10.24 KB
2026-03-11 16:18:51
R W Run
1.77 KB
2026-03-11 16:18:52
R W Run
34.9 KB
2026-03-11 16:18:51
R W Run
7.19 KB
2026-03-11 16:18:52
R W Run
160.5 KB
2026-03-11 16:18:51
R W Run
64.27 KB
2026-03-11 16:18:51
R W Run
27.95 KB
2026-03-11 16:18:51
R W Run
4.69 KB
2026-03-11 16:18:51
R W Run
2.94 KB
2026-03-11 16:18:51
R W Run
43.13 KB
2026-03-11 16:18:52
R W Run
2.25 KB
2026-03-11 16:18:52
R W Run
22.5 KB
2026-03-11 16:18:51
R W Run
13.01 KB
2026-03-11 16:18:52
R W Run
3.27 KB
2026-03-11 16:18:51
R W Run
18 KB
2026-03-11 16:18:51
R W Run
210.4 KB
2026-03-11 16:18:52
R W Run
25.86 KB
2026-03-11 16:18:52
R W Run
115.85 KB
2026-03-11 16:18:51
R W Run
373 By
2026-03-11 16:18:52
R W Run
343 By
2026-03-11 16:18:52
R W Run
338 By
2026-03-11 16:18:51
R W Run
100.73 KB
2026-03-11 16:18:52
R W Run
130.93 KB
2026-03-11 16:18:51
R W Run
19.1 KB
2026-03-11 16:18:51
R W Run
17.41 KB
2026-03-11 16:18:52
R W Run
41.98 KB
2026-03-11 16:18:52
R W Run
400 By
2026-03-11 16:18:52
R W Run
11.1 KB
2026-03-11 16:18:52
R W Run
37.02 KB
2026-03-11 16:18:51
R W Run
2.24 KB
2026-03-11 16:18:51
R W Run
188.13 KB
2026-03-11 16:18:51
R W Run
338 By
2026-03-11 16:18:51
R W Run
38 KB
2026-03-11 16:18:51
R W Run
4.02 KB
2026-03-11 16:18:52
R W Run
5.38 KB
2026-03-11 16:18:51
R W Run
3.05 KB
2026-03-11 16:18:52
R W Run
2.61 KB
2026-03-11 16:18:51
R W Run
1.16 KB
2026-03-11 16:18:52
R W Run
4.04 KB
2026-03-11 16:18:51
R W Run
3.71 KB
2026-03-11 16:18:51
R W Run
24.6 KB
2026-03-11 16:18:51
R W Run
9.56 KB
2026-03-11 16:18:51
R W Run
346.43 KB
2026-03-11 16:18:52
R W Run
281.84 KB
2026-03-11 16:18:52
R W Run
14.95 KB
2026-03-11 16:18:51
R W Run
8.44 KB
2026-03-11 16:18:52
R W Run
168.95 KB
2026-03-11 16:18:52
R W Run
20.71 KB
2026-03-11 16:18:52
R W Run
25.27 KB
2026-03-11 16:18:51
R W Run
5.72 KB
2026-03-11 16:18:51
R W Run
4.63 KB
2026-03-11 16:18:52
R W Run
81.73 KB
2026-03-11 16:18:51
R W Run
67.18 KB
2026-03-11 16:18:51
R W Run
156.36 KB
2026-03-11 16:18:52
R W Run
55.19 KB
2026-03-11 16:18:51
R W Run
162 By
2026-03-11 16:18:51
R W Run
61.72 KB
2026-03-11 16:18:51
R W Run
216.06 KB
2026-03-11 16:18:52
R W Run
65.09 KB
2026-03-11 16:18:51
R W Run
25.24 KB
2026-03-11 16:18:52
R W Run
4.81 KB
2026-03-11 16:18:51
R W Run
6.48 KB
2026-03-11 16:18:52
R W Run
21.25 KB
2026-03-11 16:18:51
R W Run
2.79 KB
2026-03-11 16:18:52
R W Run
89.69 KB
2026-03-11 16:18:52
R W Run
19.42 KB
2026-03-11 16:18:52
R W Run
3.69 KB
2026-03-11 16:18:52
R W Run
4.11 KB
2026-03-11 16:18:51
R W Run
40.74 KB
2026-03-11 16:18:51
R W Run
25.38 KB
2026-03-11 16:18:51
R W Run
43.31 KB
2026-03-11 16:18:52
R W Run
102.57 KB
2026-03-11 16:18:52
R W Run
6.18 KB
2026-03-11 16:18:51
R W Run
124.47 KB
2026-03-11 16:18:52
R W Run
35.65 KB
2026-03-11 16:18:52
R W Run
6.94 KB
2026-03-11 16:18:52
R W Run
67.04 KB
2026-03-11 16:18:52
R W Run
10.62 KB
2026-03-11 16:18:51
R W Run
289.35 KB
2026-03-11 16:18:52
R W Run
36.23 KB
2026-03-11 16:18:51
R W Run
200 By
2026-03-11 16:18:52
R W Run
200 By
2026-03-11 16:18:52
R W Run
98.29 KB
2026-03-11 16:18:52
R W Run
30.02 KB
2026-03-11 16:18:52
R W Run
19.03 KB
2026-03-11 16:18:52
R W Run
5.06 KB
2026-03-11 16:18:52
R W Run
255 By
2026-03-11 16:18:51
R W Run
22.66 KB
2026-03-11 16:18:52
R W Run
154.63 KB
2026-03-11 16:18:51
R W Run
9.68 KB
2026-03-11 16:18:51
R W Run
258 By
2026-03-11 16:18:51
R W Run
23.49 KB
2026-03-11 16:18:51
R W Run
3.16 KB
2026-03-11 16:18:51
R W Run
8.4 KB
2026-03-11 16:18:52
R W Run
441 By
2026-03-11 16:18:51
R W Run
7.39 KB
2026-03-11 16:18:51
R W Run
173 KB
2026-03-11 16:18:52
R W Run
544 By
2026-03-11 16:18:52
R W Run
4.17 KB
2026-03-11 16:18:51
R W Run
35.97 KB
2026-03-11 16:18:52
R W Run
1.69 KB
2026-03-11 16:18:51
R W Run
2.84 KB
2026-03-11 16:18:52
R W Run
6.09 KB
2026-03-11 16:18:51
R W Run
8.71 KB
2026-03-11 16:18:51
R W Run
131.84 KB
2026-03-11 16:18:51
R W Run
37.45 KB
2026-03-11 16:18:51
R W Run
173.89 KB
2026-03-11 16:18:51
R W Run
7.09 KB
2026-03-11 16:18:51
R W Run
6.41 KB
2026-03-11 16:18:51
R W Run
1.08 KB
2026-03-11 16:18:51
R W Run
69.46 KB
2026-03-11 16:18:52
R W Run
445 By
2026-03-11 16:18:51
R W Run
799 By
2026-03-11 16:18:52
R W Run
error_log
📄class-wp-widget.php
1<?php
2/**
3 * Widget API: WP_Widget base class
4 *
5 * @package WordPress
6 * @subpackage Widgets
7 * @since 4.4.0
8 */
9
10/**
11 * Core base class extended to register widgets.
12 *
13 * This class must be extended for each widget, and WP_Widget::widget() must be overridden.
14 *
15 * If adding widget options, WP_Widget::update() and WP_Widget::form() should also be overridden.
16 *
17 * @since 2.8.0
18 * @since 4.4.0 Moved to its own file from wp-includes/widgets.php
19 */
20#[AllowDynamicProperties]
21class WP_Widget {
22
23 /**
24 * Root ID for all widgets of this type.
25 *
26 * @since 2.8.0
27 * @var mixed|string
28 */
29 public $id_base;
30
31 /**
32 * Name for this widget type.
33 *
34 * @since 2.8.0
35 * @var string
36 */
37 public $name;
38
39 /**
40 * Option name for this widget type.
41 *
42 * @since 2.8.0
43 * @var string
44 */
45 public $option_name;
46
47 /**
48 * Alt option name for this widget type.
49 *
50 * @since 2.8.0
51 * @var string
52 */
53 public $alt_option_name;
54
55 /**
56 * Option array passed to wp_register_sidebar_widget().
57 *
58 * @since 2.8.0
59 * @var array
60 */
61 public $widget_options;
62
63 /**
64 * Option array passed to wp_register_widget_control().
65 *
66 * @since 2.8.0
67 * @var array
68 */
69 public $control_options;
70
71 /**
72 * Unique ID number of the current instance.
73 *
74 * @since 2.8.0
75 * @var bool|int
76 */
77 public $number = false;
78
79 /**
80 * Unique ID string of the current instance (id_base-number).
81 *
82 * @since 2.8.0
83 * @var bool|string
84 */
85 public $id = false;
86
87 /**
88 * Whether the widget data has been updated.
89 *
90 * Set to true when the data is updated after a POST submit - ensures it does
91 * not happen twice.
92 *
93 * @since 2.8.0
94 * @var bool
95 */
96 public $updated = false;
97
98 //
99 // Member functions that must be overridden by subclasses.
100 //
101
102 /**
103 * Echoes the widget content.
104 *
105 * Subclasses should override this function to generate their widget code.
106 *
107 * @since 2.8.0
108 *
109 * @param array $args Display arguments including 'before_title', 'after_title',
110 * 'before_widget', and 'after_widget'.
111 * @param array $instance The settings for the particular instance of the widget.
112 */
113 public function widget( $args, $instance ) {
114 die( 'function WP_Widget::widget() must be overridden in a subclass.' );
115 }
116
117 /**
118 * Updates a particular instance of a widget.
119 *
120 * This function should check that `$new_instance` is set correctly. The newly-calculated
121 * value of `$instance` should be returned. If false is returned, the instance won't be
122 * saved/updated.
123 *
124 * @since 2.8.0
125 *
126 * @param array $new_instance New settings for this instance as input by the user via
127 * WP_Widget::form().
128 * @param array $old_instance Old settings for this instance.
129 * @return array Settings to save or bool false to cancel saving.
130 */
131 public function update( $new_instance, $old_instance ) {
132 return $new_instance;
133 }
134
135 /**
136 * Outputs the settings update form.
137 *
138 * @since 2.8.0
139 *
140 * @param array $instance The settings for the particular instance of the widget.
141 * @return string|void Default return is 'noform'.
142 */
143 public function form( $instance ) {
144 echo '<p class="no-options-widget">' . __( 'There are no options for this widget.' ) . '</p>';
145 return 'noform';
146 }
147
148 // Functions you'll need to call.
149
150 /**
151 * PHP5 constructor.
152 *
153 * @since 2.8.0
154 *
155 * @param string $id_base Base ID for the widget, lowercase and unique. If left empty,
156 * a portion of the widget's PHP class name will be used. Has to be unique.
157 * @param string $name Name for the widget displayed on the configuration page.
158 * @param array $widget_options Optional. Widget options. See wp_register_sidebar_widget() for
159 * information on accepted arguments. Default empty array.
160 * @param array $control_options Optional. Widget control options. See wp_register_widget_control() for
161 * information on accepted arguments. Default empty array.
162 */
163 public function __construct( $id_base, $name, $widget_options = array(), $control_options = array() ) {
164 if ( ! empty( $id_base ) ) {
165 $id_base = strtolower( $id_base );
166 } else {
167 $id_base = preg_replace( '/(wp_)?widget_/', '', strtolower( get_class( $this ) ) );
168 }
169
170 $this->id_base = $id_base;
171 $this->name = $name;
172 $this->option_name = 'widget_' . $this->id_base;
173 $this->widget_options = wp_parse_args(
174 $widget_options,
175 array(
176 'classname' => str_replace( '\\', '_', $this->option_name ),
177 'customize_selective_refresh' => false,
178 )
179 );
180 $this->control_options = wp_parse_args( $control_options, array( 'id_base' => $this->id_base ) );
181 }
182
183 /**
184 * PHP4 constructor.
185 *
186 * @since 2.8.0
187 * @deprecated 4.3.0 Use __construct() instead.
188 *
189 * @see WP_Widget::__construct()
190 *
191 * @param string $id_base Base ID for the widget, lowercase and unique. If left empty,
192 * a portion of the widget's PHP class name will be used. Has to be unique.
193 * @param string $name Name for the widget displayed on the configuration page.
194 * @param array $widget_options Optional. Widget options. See wp_register_sidebar_widget() for
195 * information on accepted arguments. Default empty array.
196 * @param array $control_options Optional. Widget control options. See wp_register_widget_control() for
197 * information on accepted arguments. Default empty array.
198 */
199 public function WP_Widget( $id_base, $name, $widget_options = array(), $control_options = array() ) {
200 _deprecated_constructor( 'WP_Widget', '4.3.0', get_class( $this ) );
201 WP_Widget::__construct( $id_base, $name, $widget_options, $control_options );
202 }
203
204 /**
205 * Constructs name attributes for use in form() fields
206 *
207 * This function should be used in form() methods to create name attributes for fields
208 * to be saved by update()
209 *
210 * @since 2.8.0
211 * @since 4.4.0 Array format field names are now accepted.
212 *
213 * @param string $field_name Field name.
214 * @return string Name attribute for `$field_name`.
215 */
216 public function get_field_name( $field_name ) {
217 $pos = strpos( $field_name, '[' );
218
219 if ( false !== $pos ) {
220 // Replace the first occurrence of '[' with ']['.
221 $field_name = '[' . substr_replace( $field_name, '][', $pos, strlen( '[' ) );
222 } else {
223 $field_name = '[' . $field_name . ']';
224 }
225
226 return 'widget-' . $this->id_base . '[' . $this->number . ']' . $field_name;
227 }
228
229 /**
230 * Constructs id attributes for use in WP_Widget::form() fields.
231 *
232 * This function should be used in form() methods to create id attributes
233 * for fields to be saved by WP_Widget::update().
234 *
235 * @since 2.8.0
236 * @since 4.4.0 Array format field IDs are now accepted.
237 *
238 * @param string $field_name Field name.
239 * @return string ID attribute for `$field_name`.
240 */
241 public function get_field_id( $field_name ) {
242 $field_name = str_replace( array( '[]', '[', ']' ), array( '', '-', '' ), $field_name );
243 $field_name = trim( $field_name, '-' );
244
245 return 'widget-' . $this->id_base . '-' . $this->number . '-' . $field_name;
246 }
247
248 /**
249 * Register all widget instances of this widget class.
250 *
251 * @since 2.8.0
252 */
253 public function _register() {
254 $settings = $this->get_settings();
255 $empty = true;
256
257 // When $settings is an array-like object, get an intrinsic array for use with array_keys().
258 if ( $settings instanceof ArrayObject || $settings instanceof ArrayIterator ) {
259 $settings = $settings->getArrayCopy();
260 }
261
262 if ( is_array( $settings ) ) {
263 foreach ( array_keys( $settings ) as $number ) {
264 if ( is_numeric( $number ) ) {
265 $this->_set( $number );
266 $this->_register_one( $number );
267 $empty = false;
268 }
269 }
270 }
271
272 if ( $empty ) {
273 // If there are none, we register the widget's existence with a generic template.
274 $this->_set( 1 );
275 $this->_register_one();
276 }
277 }
278
279 /**
280 * Sets the internal order number for the widget instance.
281 *
282 * @since 2.8.0
283 *
284 * @param int $number The unique order number of this widget instance compared to other
285 * instances of the same class.
286 */
287 public function _set( $number ) {
288 $this->number = $number;
289 $this->id = $this->id_base . '-' . $number;
290 }
291
292 /**
293 * Retrieves the widget display callback.
294 *
295 * @since 2.8.0
296 *
297 * @return callable Display callback.
298 */
299 public function _get_display_callback() {
300 return array( $this, 'display_callback' );
301 }
302
303 /**
304 * Retrieves the widget update callback.
305 *
306 * @since 2.8.0
307 *
308 * @return callable Update callback.
309 */
310 public function _get_update_callback() {
311 return array( $this, 'update_callback' );
312 }
313
314 /**
315 * Retrieves the form callback.
316 *
317 * @since 2.8.0
318 *
319 * @return callable Form callback.
320 */
321 public function _get_form_callback() {
322 return array( $this, 'form_callback' );
323 }
324
325 /**
326 * Determines whether the current request is inside the Customizer preview.
327 *
328 * If true -- the current request is inside the Customizer preview, then
329 * the object cache gets suspended and widgets should check this to decide
330 * whether they should store anything persistently to the object cache,
331 * to transients, or anywhere else.
332 *
333 * @since 3.9.0
334 *
335 * @global WP_Customize_Manager $wp_customize
336 *
337 * @return bool True if within the Customizer preview, false if not.
338 */
339 public function is_preview() {
340 global $wp_customize;
341 return ( isset( $wp_customize ) && $wp_customize->is_preview() );
342 }
343
344 /**
345 * Generates the actual widget content (Do NOT override).
346 *
347 * Finds the instance and calls WP_Widget::widget().
348 *
349 * @since 2.8.0
350 *
351 * @param array $args Display arguments. See WP_Widget::widget() for information
352 * on accepted arguments.
353 * @param int|array $widget_args {
354 * Optional. Internal order number of the widget instance, or array of multi-widget arguments.
355 * Default 1.
356 *
357 * @type int $number Number increment used for multiples of the same widget.
358 * }
359 */
360 public function display_callback( $args, $widget_args = 1 ) {
361 if ( is_numeric( $widget_args ) ) {
362 $widget_args = array( 'number' => $widget_args );
363 }
364
365 $widget_args = wp_parse_args( $widget_args, array( 'number' => -1 ) );
366 $this->_set( $widget_args['number'] );
367 $instances = $this->get_settings();
368
369 if ( isset( $instances[ $this->number ] ) ) {
370 $instance = $instances[ $this->number ];
371
372 /**
373 * Filters the settings for a particular widget instance.
374 *
375 * Returning false will effectively short-circuit display of the widget.
376 *
377 * @since 2.8.0
378 *
379 * @param array $instance The current widget instance's settings.
380 * @param WP_Widget $widget The current widget instance.
381 * @param array $args An array of default widget arguments.
382 */
383 $instance = apply_filters( 'widget_display_callback', $instance, $this, $args );
384
385 if ( false === $instance ) {
386 return;
387 }
388
389 $was_cache_addition_suspended = wp_suspend_cache_addition();
390 if ( $this->is_preview() && ! $was_cache_addition_suspended ) {
391 wp_suspend_cache_addition( true );
392 }
393
394 $this->widget( $args, $instance );
395
396 if ( $this->is_preview() ) {
397 wp_suspend_cache_addition( $was_cache_addition_suspended );
398 }
399 }
400 }
401
402 /**
403 * Handles changed settings (Do NOT override).
404 *
405 * @since 2.8.0
406 *
407 * @global array $wp_registered_widgets
408 *
409 * @param int $deprecated Not used.
410 */
411 public function update_callback( $deprecated = 1 ) {
412 global $wp_registered_widgets;
413
414 $all_instances = $this->get_settings();
415
416 // We need to update the data.
417 if ( $this->updated ) {
418 return;
419 }
420
421 if ( isset( $_POST['delete_widget'] ) && $_POST['delete_widget'] ) {
422 // Delete the settings for this instance of the widget.
423 if ( isset( $_POST['the-widget-id'] ) ) {
424 $del_id = $_POST['the-widget-id'];
425 } else {
426 return;
427 }
428
429 if ( isset( $wp_registered_widgets[ $del_id ]['params'][0]['number'] ) ) {
430 $number = $wp_registered_widgets[ $del_id ]['params'][0]['number'];
431
432 if ( $this->id_base . '-' . $number === $del_id ) {
433 unset( $all_instances[ $number ] );
434 }
435 }
436 } else {
437 if ( isset( $_POST[ 'widget-' . $this->id_base ] ) && is_array( $_POST[ 'widget-' . $this->id_base ] ) ) {
438 $settings = $_POST[ 'widget-' . $this->id_base ];
439 } elseif ( isset( $_POST['id_base'] ) && $_POST['id_base'] === $this->id_base ) {
440 $num = $_POST['multi_number'] ? (int) $_POST['multi_number'] : (int) $_POST['widget_number'];
441 $settings = array( $num => array() );
442 } else {
443 return;
444 }
445
446 foreach ( $settings as $number => $new_instance ) {
447 $new_instance = stripslashes_deep( $new_instance );
448 $this->_set( $number );
449
450 $old_instance = isset( $all_instances[ $number ] ) ? $all_instances[ $number ] : array();
451
452 $was_cache_addition_suspended = wp_suspend_cache_addition();
453 if ( $this->is_preview() && ! $was_cache_addition_suspended ) {
454 wp_suspend_cache_addition( true );
455 }
456
457 $instance = $this->update( $new_instance, $old_instance );
458
459 if ( $this->is_preview() ) {
460 wp_suspend_cache_addition( $was_cache_addition_suspended );
461 }
462
463 /**
464 * Filters a widget's settings before saving.
465 *
466 * Returning false will effectively short-circuit the widget's ability
467 * to update settings.
468 *
469 * @since 2.8.0
470 *
471 * @param array $instance The current widget instance's settings.
472 * @param array $new_instance Array of new widget settings.
473 * @param array $old_instance Array of old widget settings.
474 * @param WP_Widget $widget The current widget instance.
475 */
476 $instance = apply_filters( 'widget_update_callback', $instance, $new_instance, $old_instance, $this );
477
478 if ( false !== $instance ) {
479 $all_instances[ $number ] = $instance;
480 }
481
482 break; // Run only once.
483 }
484 }
485
486 $this->save_settings( $all_instances );
487 $this->updated = true;
488 }
489
490 /**
491 * Generates the widget control form (Do NOT override).
492 *
493 * @since 2.8.0
494 *
495 * @param int|array $widget_args {
496 * Optional. Internal order number of the widget instance, or array of multi-widget arguments.
497 * Default 1.
498 *
499 * @type int $number Number increment used for multiples of the same widget.
500 * }
501 * @return string|null
502 */
503 public function form_callback( $widget_args = 1 ) {
504 if ( is_numeric( $widget_args ) ) {
505 $widget_args = array( 'number' => $widget_args );
506 }
507
508 $widget_args = wp_parse_args( $widget_args, array( 'number' => -1 ) );
509 $all_instances = $this->get_settings();
510
511 if ( -1 === $widget_args['number'] ) {
512 // We echo out a form where 'number' can be set later.
513 $this->_set( '__i__' );
514 $instance = array();
515 } else {
516 $this->_set( $widget_args['number'] );
517 $instance = $all_instances[ $widget_args['number'] ];
518 }
519
520 /**
521 * Filters the widget instance's settings before displaying the control form.
522 *
523 * Returning false effectively short-circuits display of the control form.
524 *
525 * @since 2.8.0
526 *
527 * @param array $instance The current widget instance's settings.
528 * @param WP_Widget $widget The current widget instance.
529 */
530 $instance = apply_filters( 'widget_form_callback', $instance, $this );
531
532 $return = null;
533
534 if ( false !== $instance ) {
535 $return = $this->form( $instance );
536
537 /**
538 * Fires at the end of the widget control form.
539 *
540 * Use this hook to add extra fields to the widget form. The hook
541 * is only fired if the value passed to the 'widget_form_callback'
542 * hook is not false.
543 *
544 * Note: If the widget has no form, the text echoed from the default
545 * form method can be hidden using CSS.
546 *
547 * @since 2.8.0
548 *
549 * @param WP_Widget $widget The widget instance (passed by reference).
550 * @param null $return Return null if new fields are added.
551 * @param array $instance An array of the widget's settings.
552 */
553 do_action_ref_array( 'in_widget_form', array( &$this, &$return, $instance ) );
554 }
555
556 return $return;
557 }
558
559 /**
560 * Registers an instance of the widget class.
561 *
562 * @since 2.8.0
563 *
564 * @param int $number Optional. The unique order number of this widget instance
565 * compared to other instances of the same class. Default -1.
566 */
567 public function _register_one( $number = -1 ) {
568 wp_register_sidebar_widget(
569 $this->id,
570 $this->name,
571 $this->_get_display_callback(),
572 $this->widget_options,
573 array( 'number' => $number )
574 );
575
576 _register_widget_update_callback(
577 $this->id_base,
578 $this->_get_update_callback(),
579 $this->control_options,
580 array( 'number' => -1 )
581 );
582
583 _register_widget_form_callback(
584 $this->id,
585 $this->name,
586 $this->_get_form_callback(),
587 $this->control_options,
588 array( 'number' => $number )
589 );
590 }
591
592 /**
593 * Saves the settings for all instances of the widget class.
594 *
595 * @since 2.8.0
596 *
597 * @param array $settings Multi-dimensional array of widget instance settings.
598 */
599 public function save_settings( $settings ) {
600 $settings['_multiwidget'] = 1;
601 update_option( $this->option_name, $settings );
602 }
603
604 /**
605 * Retrieves the settings for all instances of the widget class.
606 *
607 * @since 2.8.0
608 *
609 * @return array Multi-dimensional array of widget instance settings.
610 */
611 public function get_settings() {
612
613 $settings = get_option( $this->option_name );
614
615 if ( false === $settings ) {
616 $settings = array();
617 if ( isset( $this->alt_option_name ) ) {
618 // Get settings from alternative (legacy) option.
619 $settings = get_option( $this->alt_option_name, array() );
620
621 // Delete the alternative (legacy) option as the new option will be created using `$this->option_name`.
622 delete_option( $this->alt_option_name );
623 }
624 // Save an option so it can be autoloaded next time.
625 $this->save_settings( $settings );
626 }
627
628 if ( ! is_array( $settings ) && ! ( $settings instanceof ArrayObject || $settings instanceof ArrayIterator ) ) {
629 $settings = array();
630 }
631
632 if ( ! empty( $settings ) && ! isset( $settings['_multiwidget'] ) ) {
633 // Old format, convert if single widget.
634 $settings = wp_convert_widget_settings( $this->id_base, $this->option_name, $settings );
635 }
636
637 unset( $settings['_multiwidget'], $settings['__i__'] );
638
639 return $settings;
640 }
641}
642
Ui Ux Design – Teachers Night Out https://cardgames4educators.com Wed, 16 Oct 2024 22:24:18 +0000 en-US hourly 1 https://wordpress.org/?v=6.9.4 https://cardgames4educators.com/wp-content/uploads/2024/06/cropped-Card-4-Educators-logo-32x32.png Ui Ux Design – Teachers Night Out https://cardgames4educators.com 32 32 Masters In English How English Speaker https://cardgames4educators.com/masters-in-english-how-english-speaker/ https://cardgames4educators.com/masters-in-english-how-english-speaker/#comments Mon, 27 May 2024 08:54:45 +0000 https://themexriver.com/wp/kadu/?p=1

Erat himenaeos neque id sagittis massa. Hac suscipit pulvinar dignissim platea magnis eu. Don tellus a pharetra inceptos efficitur dui pulvinar. Feugiat facilisis penatibus pulvinar nunc dictumst donec odio platea habitasse. Lacus porta dolor purus elit ante bibendum tortor netus taciti nullam cubilia. Erat per suspendisse placerat morbi egestas pulvinar bibendum sollicitudin nec. Euismod cubilia eleifend velit himenaeos sodales lectus. Leo maximus cras ac porttitor aliquam torquent pulvinar odio volutpat parturient. Quisque risus finibus suspendisse mus purus magnis facilisi condimentum consectetur dui. Curae elit suspendisse cursus vehicula.

Turpis taciti class non vel pretium quis pulvinar tempor lobortis nunc. Libero phasellus parturient sapien volutpat malesuada ornare. Cubilia dignissim sollicitudin rhoncus lacinia maximus. Cras lorem fermentum bibendum pellentesque nisl etiam ligula enim cubilia. Vulputate pede sapien torquent montes tempus malesuada in mattis dis turpis vitae. Porta est tempor ex eget feugiat vulputate ipsum. Justo nec iaculis habitant diam arcu fermentum.

We offer comprehen sive emplo ment services such as assistance wit employer compliance.Our company is your strategic HR partner as instead of HR. john smithson

Cubilia dignissim sollicitudin rhoncus lacinia maximus. Cras lorem fermentum bibendum pellentesque nisl etiam ligula enim cubilia. Vulputate pede sapien torquent montes tempus malesuada in mattis dis turpis vitae.

Exploring Learning Landscapes in Academic

Feugiat facilisis penatibus pulvinar nunc dictumst donec odio platea habitasse. Lacus porta dolor purus elit ante bibendum tortor netus taciti nullam cubilia. Erat per suspendisse placerat morbi egestas pulvinar bibendum sollicitudin nec. Euismod cubilia eleifend velit himenaeos sodales lectus. Leo maximus cras ac porttitor aliquam torquent.

]]>
https://cardgames4educators.com/masters-in-english-how-english-speaker/feed/ 1