使WordPress成为核心

来源: 标签/6.5/型钢混凝土/wp包括/类wp-widget.php

上次更改时间在这个文件上56466,签入者谢尔盖·比尤科夫,9个月前

编码标准:在wp-includes/class-wp-widget.php.

后续行动[10764],[10912],[11427].

道具亚里士多德、波纳、阿费西娅、谢尔盖·比尤科夫。
请参见#58831.

  • 财产svn:eol风格设置为本地的
文件大小: 18.0 KB
线路 
1<?php(电话)
2/**
*小工具API:WP_Widget基类
4 *
5*@package WordPress
6*@子包小工具
7*@自4.4.0起
8*/
9
10/**
11*扩展核心基类以注册小部件。
12 *
13*必须为每个小部件扩展此类,并且必须覆盖WP_widget::widget()。
14 *
15*如果添加小部件选项,WP_widget::update()和WP_Wigget::form()也应被覆盖。
16 *
17*@自2.8.0起
18*@自4.4.0起从wp-includes/widgets.php移动到自己的文件
19 */
20#[允许动态属性]
21 WP_小工具 {
22
23       /**
24*此类型的所有小部件的根ID。
25         *
26*@自2.8.0起
27*@var混合|string
28         */
29       公众的 $id基础
30
31       /**
32*此小部件类型的名称。
33         *
34*@自2.8.0起
35*@var字符串
36         */
37       公众的 $名称
38
39       /**
40*此小部件类型的选项名称。
41         *
42*@自2.8.0起
43*@var字符串
44         */
45       公众的 $option_name(选项名称)
46
47       /**
48*此小部件类型的Alt选项名称。
49         *
50*@自2.8.0起
51*@var字符串
52         */
53       公众的 $可选名称
54
55       /**
56*传递给wp_register_sidebar_widget()的选项数组。
57         *
58*@自2.8.0起
59*@var数组
60         */
61       公众的 $小部件选项
62
63       /**
64*传递给wp_register_widget_control()的选项数组。
65         *
66*@自2.8.0起
67*@var数组
68         */
69       公众的 $控制选项
70
71       /**
72*当前实例的唯一ID号。
73         *
74*@自2.8.0起
75*@var bool|int
76         */
77       公众的 $个 = 
78
79       /**
80*当前实例的唯一ID字符串(ID_base-number)。
81         *
82*@自2.8.0起
83*@var bool|string
84         */
85       公众的 $id(美元) = 
86
87       /**
88*小部件数据是否已更新。
89         *
90*在POST提交后更新数据时设置为true-确保数据更新
91*不会发生两次。
92         *
93*@自2.8.0起
94*@var bool
95         */
96       公众的 $已更新 = 
97
98       //
99       //必须由子类覆盖的成员函数。
100       //
101
102       /**
103*回显小部件内容。
104         *
105*子类应覆盖此函数以生成其小部件代码。
106         *
107*@自2.8.0起
108         *
109*@param array$args显示参数,包括'before_title'、'after_title',
110*'before_widget'和'after_widget]。
111*@param array$instance小部件特定实例的设置。
112         */
113       公众的 功能 小装置( $个参数, $实例 ) {
114               死亡( “必须在子类中重写函数WP_Widget::Widget()。” );
115       }
116
117       /**
118*更新小部件的特定实例。
119         *
120*此函数应检查`$new_instance`是否设置正确。新计算的
121*应返回`$instance`的值。如果返回false,则实例不会
122*已保存/更新。
123         *
124*@自2.8.0起
125         *
126*@param array$new_instance用户通过输入此实例的新设置
127*WP_Widget::form()。
128*@param array$old_instance此实例的旧设置。
129*@return array Settings可保存,bool false可取消保存。
130         */
131       公众的 功能 更新( $新实例, $old_instance(旧实例) ) {
132               返回 $新实例
133       }
134
135       /**
136*输出设置更新表单。
137         *
138*@自2.8.0起
139         *
140*@param array$instance当前设置。
141*@return string默认返回为“noform”。
142         */
143       公众的 功能 形式( $实例 ) {
144               回声 '<p class=“no-options-widget”>' . __( “此小部件没有选项。” ) . “</p>”
145               返回 “无格式”
146       }
147
148       //您需要调用的函数。
149
150       /**
151*PHP5构造函数。
152         *
153*@自2.8.0起
154         *
155*@param string$id_base小部件的基本id,小写且唯一。如果留空,
156*将使用小部件的PHP类名的一部分。必须是独一无二的。
157*@param string$name配置页面上显示的小部件的名称。
158*@param array$widget_options可选。小工具选项。请参阅wp_register_sidebar_widget()了解
159*关于已接受参数的信息。默认空数组。
160*@param array$control_options可选。小工具控制选项。请参阅wp_register_widget_control()了解
161*关于已接受参数的信息。默认空数组。
162         */
163       公众的 功能 __构造( $id_基础, $名称, $小部件选项 = 阵列(), $控制选项 = 阵列() ) {
164               如果 ( ! 空的( $id基础 ) ) {
165                       $id基础 = 斯特劳尔( $id基础 );
166               } 其他的 {
167                       $id_基础 = preg_替换( '/(wp_)?小部件_/', '', 斯特劳尔( 获取类(_C)( $这个 ) ) );
168               }
169
170               $这个->id基础(_B)         = $id基础
171               $这个->名称           = $名称
172               $这个->选项名称     = '小部件_' . $这个->id基础(_B)
173               $这个->小部件选项(_O) = wp_parse_args(
174                       $小部件选项,
175                       阵列(
176                               '类名称'                   => str_替换( '\\', '_', $这个->选项名称 ),
177                               '自定义_选择_刷新' => ,
178                       )
179               );
180               $这个->控制选项(_O) = wp_parse_args( $控制选项, 阵列( 'id基础' => $这个->id基础(_B) ) );
181       }
182
183       /**
184*PHP4构造函数。
185         *
186*@自2.8.0起
187*@已弃用4.3.0请改用__construct()。
188         *
189*@请参阅WP_Widget::__construct()
190         *
191*@param string$id_base小部件的基本id,小写且唯一。如果留空,
192*将使用小部件的PHP类名的一部分。必须是独一无二的。
193*@param string$name配置页面上显示的小部件的名称。
194*@param array$widget_options可选。小工具选项。请参阅wp_register_sidebar_widget()了解
195*关于公认论点的信息。默认空数组。
196*@param array$control_options可选。小工具控制选项。请参阅wp_register_widget_control()了解
197*关于已接受参数的信息。默认空数组。
198         */
199       公众的 功能 WP_小工具( $id基础, $名称, $小部件选项 = 阵列(), $控制选项 = 阵列() ) {
200               _已弃用的构造函数( “WP_Widget”, “4.3.0”, 获取类(_C)( $这个 ) );
201               WP_小工具::__构造( $id基础, $名称, $小部件选项, $控制选项 );
202       }
203
204       /**
205*构造用于form()字段的名称属性
206         *
207*此函数应在form()方法中使用,以创建字段的名称属性
208*由update()保存
209         *
210*@自2.8.0起
211*@自4.4.0以来,现在接受数组格式字段名。
212         *
213*@param string$field_name字段名。
214*@return string `$field_Name`的Name属性。
215         */
216       公众的 功能 获取字段名称( $字段名称 ) {
217               百万美元 = 斯特波斯( $字段名, '[' );
218
219               如果 (  !== 百万美元 ) {
220                       //将第一次出现的“[”替换为“][”。
221                       $字段名 = '[' . substr_replace(子替换)( $字段名称, '][', 百万美元, 斯特伦( '[' ) );
222               } 其他的 {
223                       $字段名 = '[' . $字段名 . ']'
224               }
225
226               返回 '小部件-' . $这个->id基础(_B) . '[' . $这个-> . ']' . $字段名
227       }
228
229       /**
230*构造用于WP_Widget::form()字段的id属性。
231         *
232*此函数应在form()方法中用于创建id属性
233*用于WP_Widget::update()保存的字段。
234         *
235*@自2.8.0起
236*@自4.4.0以来,现在接受数组格式字段ID。
237         *
238*@param string$field_name字段名。
239*@return `$field_name`的字符串ID属性。
240         */
241       公众的 功能 获取字段id( $字段名 ) {
242               $字段名 = str_替换( 阵列( '[]', '[', ']' ), 阵列( '', '-', '' ), $字段名 );
243               $字段名 = 修剪( $字段名, '-' );
244
245               返回 '小部件-' . $这个->id基础(_B) . '-' . $这个-> . '-' . $字段名称
246       }
247
248       /**
249*注册此小部件类的所有小部件实例。
250         *
251*@自2.8.0起
252         */
253       公众的 功能 _寄存器() {
254               $设置 = $这个->获取设置(_S)();
255               $空   = 真的
256
257               //当$settings是类似数组的对象时,获取一个内部数组以与array_keys()一起使用。
258               如果 ( $设置 运算符 数组对象 || $设置 运算符 数组迭代器 ) {
259                       $设置 = $设置->获取阵列副本();
260               }
261
262               如果 ( 是数组(_A)( $设置 ) ) {
263                       foreach公司 ( 数组键( $设置 ) 作为 $个 ) {
264                               如果 ( 是数字(_N)( $个 ) ) {
265                                       $这个->_套( $个 );
266                                       $这个->_寄存器_一( $个 );
267                                       $空 = 
268                               }
269                       }
270               }
271
272               如果 ( $空 ) {
273                       //如果没有,我们用一个通用模板来注册小部件的存在。
274                       $这个->_套( 1 );
275                       $这个->_寄存器_一();
276               }
277       }
278
279       /**
280*设置小部件实例的内部订单号。
281         *
282*@自2.8.0起
283         *
284*@param int$number此小部件实例与其他小部件实例相比的唯一订单号
285*同一类的实例。
286         */
287       公众的 功能 _套( $个 ) {
288               $这个-> = $数字
289               $这个->身份证件     = $这个->id基础(_B) . '-' . $个
290       }
291
292       /**
293*检索小部件显示回调。
294         *
295*@自2.8.0起
296         *
297*@return可调用显示回调。
298         */
299       公众的 功能 _获取显示回调() {
300               返回 阵列( $这个, '显示回调' );
301       }
302
303       /**
304*检索小部件更新回调。
305         *
306*@自2.8.0起
307         *
308*@return可调用更新回调。
309         */
310       公众的 功能 _获取更新回拨() {
311               返回 阵列( $这个, '更新回调' );
312       }
313
314       /**
315*检索表单回调。
316         *
317*@自2.8.0起
318         *
319*@return可调用窗体回调。
320         */
321       公众的 功能 _获取表单回调() {
322               返回 阵列( $这个, '表单回调' );
323       }
324
325       /**
326*确定当前请求是否在Customizer预览中。
327         *
328*如果为true,则当前请求位于Customizer预览中,然后
329*对象缓存被挂起,小部件应检查此项以决定
330*是否应将任何内容持久存储到对象缓存,
331*瞬变或其他任何地方。
332         *
333*@自3.9.0起
334         *
335*@global WP_Customize_Manager$WP_Customize
336         *
337*@return bool如果在Customizer预览中,则为True,否则为false。
338         */
339       公众的 功能 is_preview(预览)() {
340               全球的 $wp_自定义
341               返回 ( 发行( $wp_自定义 ) && $wp_自定义->is_preview(预览)() );
342       }
343
344       /**
345*生成实际的小部件内容(请勿覆盖)。
346         *
347*查找实例并调用WP_Widget::Widget()。
348         *
349*@自2.8.0起
350         *
351*@param array$args显示参数。有关信息,请参阅WP_Widget::Widget()
352*基于已接受的论点。
353*@param int |数组$widget_args{
354*可选。小部件实例的内部订单号或多小部件参数数组。
355*默认值1。
356         *
357*@type int$number用于同一小部件的倍数的数字增量。
358         * }
359         */
360       公众的 功能 显示_回调( $个参数, $小部件_参数 = 1 ) {
361               如果 ( 是数字(_N)( $小部件_参数 ) ) {
362                       $小部件_参数 = 阵列( “数字” => $小部件_参数 );
363               }
364
365               $小部件_参数 = wp_parse_args( $小部件_参数, 阵列( “数字” => -1 ) );
366               $这个->_集合( $小部件_参数[“数字”] );
367               $个实例 = $这个->获取设置(_S)();
368
369               如果 ( 发行( $个实例[ $这个-> ] ) ) {
370                       $实例 = $个实例[ $这个-> ];
371
372                       /**
373*过滤特定小部件实例的设置。
374                         *
375*返回false将有效地缩短小部件的显示。
376                         *
377*@自2.8.0起
378                         *
379*@param array$instance当前小部件实例的设置。
380*@param WP_Widget$小部件当前小部件实例。
381*@param array$args默认小部件参数的数组。
382                         */
383                       $实例 = 应用筛选器( '小工具_显示_回调', $实例, $这个, $个参数 );
384
385                       如果 (  === $实例 ) {
386                               返回
387                       }
388
389                       $was_cache_addition_suspended = wp_suspend_cache_addition(暂停缓存添加)();
390                       如果 ( $这个->is_preview(预览)() && ! $was_cache_addition_suspended ) {
391                               wp_suspend_cache_addition(暂停缓存添加)( 真的 );
392                       }
393
394                       $这个->小装置( $个参数, $实例 );
395
396                       如果 ( $这个->is_preview(预览)() ) {
397                               wp_suspend_cache_addition(暂停缓存添加)( $was_cache_addition_suspended );
398                       }
399               }
400       }
401
402       /**
403*处理更改的设置(请勿覆盖)。
404         *
405*@自2.8.0起
406         *
407*@全局数组$wp_registered_widgets
408         *
409*@param int$已弃用未使用。
410         */
411       公众的 功能 update_callback(更新回拨)( $已弃用 = 1 ) {
412               全球的 $wp_注册_widgets
413
414               $所有实例 = $这个->获取设置(_S)();
415
416               //我们需要更新数据。
417               如果 ( $这个->已更新 ) {
418                       返回
419               }
420
421               如果 ( 发行( $_POST(发送)['删除小部件'] ) && $_POST(发送)['删除小部件'] ) {
422                       //删除此小部件实例的设置。
423                       如果 ( 发行( $_POST(发送)[“widget-id”] ) ) {
424                               $删除id = $_POST(发送)[“widget-id”];
425                       } 其他的 {
426                               返回
427                       }
428
429                       如果 ( isset公司( $wp_注册_widgets[ $删除id ]['参数'][0][“数字”] ) ) {
430                               $个 = $wp_注册_widgets[ $删除id ]['参数'][0][“数字”];
431
432                               如果 ( $这个->id基础(_B) . '-' . $个 === $删除id ) {
433                                       未设置( $所有实例[ $个 ] );
434                               }
435                       }
436               } 其他的 {
437                       如果 ( 发行( $_POST(发送)[ '小部件-' . $这个->id基础(_B) ] ) && 是数组(_A)( $_POST(发送)[ '小部件-' . $这个->id基础(_B) ] ) ) {
438                               $设置 = $_成本[ '小部件-' . $这个->id基础(_B) ];
439                       } 埃尔塞夫 ( 发行( $_POST(发送)['id基础'] ) && $_POST(发送)['id基础'] === $这个->id基础(_B) ) {
440                               $num个     = $_POST(发送)['多重编号'] ? (整数) $_POST(发送)['多编号'] : (整数) $_POST(发送)['小部件编号'];
441                               $设置 = 阵列( $num个 => 阵列() );
442                       } 其他的 {
443                               返回
444                       }
445
446                       foreach公司 ( $设置 作为 $个 => $新实例 ) {
447                               $新实例 = 条带斜杠_步( $新实例 );
448                               $这个->_套( $个 );
449
450                               $old_instance(旧实例) = 发行( $所有实例[ $数字 ] ) ? $所有实例[ $个 ] : 阵列();
451
452                               $was_cache_addition_suspended = wp_suspend_cache_addition(暂停缓存添加)();
453                               如果 ( $这个->is_preview(预览)() && ! $was_cache_addition_suspended ) {
454                                       wp_suspend_cache_addition(暂停缓存添加)( 真的 );
455                               }
456
457                               $实例 = $这个->更新( $新实例, $old_instance(旧实例) );
458
459                               如果 ( $这个->is_preview(预览)() ) {
460                                       wp_suspend_cache_addition(暂停缓存添加)( $was_cache_addition_suspended );
461                               }
462
463                               /**
464*保存前过滤小部件的设置。
465                                 *
466*返回false将有效地缩短小部件的功能
467*以更新设置。
468                                 *
469*@自2.8.0起
470                                 *
471*@param array$instance当前小部件实例的设置。
472*@param array$new_instance新小部件设置的数组。
473*@param array$old_instance旧窗口小部件设置的数组。
474*@param WP_Widget$小部件当前小部件实例。
475                                 */
476                               $实例 = 应用筛选器( '小部件更新回调', $实例, $新实例, $old_instance(旧实例), $这个 );
477
478                               如果 (  !== $实例 ) {
479                                       $所有实例[ $个 ] = $实例
480                               }
481
482                               打破 //只运行一次。
483                       }
484               }
485
486               $这个->保存设置(_S)( $所有实例 );
487               $这个->已更新 = 真的
488       }
489
490       /**
491*生成小部件控制表单(请勿覆盖)。
492         *
493*@自2.8.0起
494         *
495*@param int |数组$widget_args{
496*可选。小部件实例的内部订单号或多小部件参数数组。
497*默认值1。
498         *
499*@type int$number用于同一小部件的倍数的数字增量。
500         * }
501*@return string|null
502         */
503       公众的 功能 表单回调( $小部件_参数 = 1 ) {
504               如果 ( 是数字(_N)( $小部件_参数 ) ) {
505                       $小部件_参数 = 阵列( “数字” => $小部件_参数 );
506               }
507
508               $小部件_参数   = wp_parse_args( $小部件_参数, 阵列( “数字” => -1 ) );
509               $所有实例 = $这个->获取设置(_S)();
510
511               如果 ( -1 === $小部件_参数[“数字”] ) {
512                       //我们回显出一个表单,稍后可以设置“数字”。
513                       $这个->_套( '__i__' );
514                       $实例 = 阵列();
515               } 其他的 {
516                       $这个->_套( $小部件_参数[“数字”] );
517                       $实例 = $所有实例[ $小部件_参数[“数字”] ];
518               }
519
520               /**
521*在显示控件窗体之前过滤小部件实例的设置。
522                 *
523*返回控制窗体的假有效短路显示。
524                 *
525*@自2.8.0起
526                 *
527*@param array$instance当前小部件实例的设置。
528*@param WP_Widget$小部件当前小部件实例。
529                 */
530               $实例 = 应用筛选器( '小部件_窗体_回调', $实例, $这个 );
531
532               $返回 = 无效的
533
534               如果 (  !== $实例 ) {
535                       $返回 = $这个->形式( $实例 );
536
537                       /**
538*在小部件控件窗体的末尾激发。
539                         *
540*使用这个钩子向小部件表单添加额外的字段。钩子
541仅当传递给“widget_form_callback”的值时,才会激发*
542*挂钩不是假的。
543                         *
544*注意:如果小部件没有表单,文本将从默认值回显
545*可以使用CSS隐藏表单方法。
546                         *
547*@自2.8.0起
548                         *
549*@param WP_Widget$Widget小部件实例(通过引用传递)。
550*@param null$return如果添加了新字段,则返回null。
551*@param array$instance小部件设置的数组。
552                         */
553                       do_操作_数组( '在小部件表单中', 阵列( &$这个, &$返回, $实例 ) );
554               }
555
556               返回 $返回
557       }
558
559       /**
560*注册小部件类的实例。
561         *
562*@自2.8.0起
563         *
564*@param int$number可选。此小部件实例的唯一订单号
565*与同一类的其他实例进行比较。默认值为1。
566         */
567       公众的 功能 _寄存器_一( $个 = -1 ) {
568               wp_register_sidebar小部件(
569                       $这个->身份证件,
570                       $这个->名称,
571                       $这个->_获取显示回调(),
572                       $这个->小部件选项(_O),
573                       阵列( “数字” => $个 )
574               );
575
576               _注册表小部件更新回调(
577                       $这个->id基础(_B),
578                       $这个->_获取更新回拨(),
579                       $这个->控制选项(_O),
580                       阵列( “数字” => -1 )
581               );
582
583               _注册表小部件格式回调(
584                       $这个->身份证件,
585                       $这个->名称,
586                       $这个->_获取表单回调(),
587                       $这个->控制选项(_O),
588                       阵列( “数字” => $个 )
589               );
590       }
591
592       /**
593*保存小部件类的所有实例的设置。
594         *
595*@自2.8.0起
596         *
597*@param array$settings小部件实例设置的多维数组。
598         */
599       公众的 功能 保存设置(_S)( $设置 ) {
600               $设置[“多窗口小部件(_M)”] = 1
601               更新选项( $这个->选项名称, $设置 );
602       }
603
604       /**
605*检索小部件类的所有实例的设置。
606         *
607*@自2.8.0起
608         *
609*@return array小部件实例设置的多维数组。
610         */
611       公众的 功能 获取设置(_S)() {
612
613               $设置 = 获取选项(_O)( $这个->选项名称 );
614
615               如果 (  === $设置 ) {
616                       $设置 = 阵列();
617                       如果 ( 发行( $这个->可选名称 ) ) {
618                               //从替代(传统)选项获取设置。
619                               $设置 = 获取选项(_O)( $这个->可选名称, 阵列() );
620
621                               //删除替代(传统)选项,因为将使用`$this->option_name`创建新选项。
622                               删除选项( $这个->可选名称 );
623                       }
624                       //保存一个选项,以便下次自动加载。
625                       $这个->保存设置(_S)( $设置 );
626               }
627
628               如果 ( ! 是数组(_A)( $设置 ) && ! ( $设置 运算符 数组对象 || $设置 运算符 数组迭代器 ) ) {
629                       $设置 = 阵列();
630               }
631
632               如果 ( ! 空的( $设置 ) && ! 发行( $设置[“多窗口小部件(_M)”] ) ) {
633                       //旧格式,如果是单个小部件,则进行转换。
634                       $设置 = wp_convert_widget_settings(wp_convert_widget_settings)( $这个->id基础(_B), $这个->选项名称, $设置 );
635               }
636
637               未设置( $设置[“多窗口小部件(_M)”], $设置['__i__'] );
638
639               返回 $设置
640       }
641}
注:请参见Trac浏览器获取有关使用存储库浏览器的帮助。