跳到内容
导航菜单
切换导航
登录
产品
行动
自动化任何工作流
包装
托管和管理包
安全
查找并修复漏洞
代码空间
即时开发环境
GitHub Copilot公司
使用AI编写更好的代码
代码审查
管理代码更改
问题
计划和跟踪工作
讨论
在代码外协作
探索
所有功能
文档
GitHub技能
博客
解决
对于
企业
团队
创业公司
教育类
按解决方案
CI/CD和自动化
开发运营
开发安全操作
资源
学习途径
白皮书、电子书、网络研讨会
客户案例
合作伙伴
开放源代码
GitHub赞助商
资助开源开发者
ReadME项目
GitHub社区文章
存储库
话题
趋向
收藏
企业
企业平台
人工智能驱动的开发者平台
可用附加组件
高级安全
企业级安全功能
GitHub Copilot公司
企业级AI功能
高级支持
企业级全天候支持
定价
搜索或跳转到。。。
搜索代码、存储库、用户、问题、推送请求。。。
搜索
清除
搜索语法提示
提供反馈
我们阅读了每一条反馈,并非常认真地对待您的意见。
包括我的电子邮件地址以便联系我
保存的搜索
使用保存的搜索更快地筛选结果
姓名
查询
要查看所有可用的限定符,请参阅我们的
文档
。
登录
注册
您使用另一个选项卡或窗口登录。
重新加载
刷新会话。
您在另一个选项卡或窗口中注销。
重新加载
刷新会话。
您在另一个选项卡或窗口上切换了帐户。
重新加载
刷新会话。
解除警报
{{消息}}
WordPress(文字出版社)
/
文字印刷-开发
公共镜像
镜像自
git://develop.git.wordpress.org/
通知
您必须登录才能更改通知设置
福克
240公里
星星
230公里
代码
拉取请求
1.6公里
行动
安全
洞察力
其他导航选项
代码
拉取请求
行动
安全
洞察力
文件夹
6.5
面包屑
文字印刷-开发
/
型钢混凝土
/
wp-管理员
/
包括
/
类主题升级.php
责备
责备
最新提交
历史
历史
807行(698个位置)·26.2 KB
6.5
面包屑
文字印刷-开发
/
型钢混凝土
/
wp-管理员
/
包括
/
类主题升级.php
顶部
文件元数据和控件
代码
责备
807行(698个位置)·26.2 KB
原始
1
2
三
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
<?
php(电话)
/**
*升级API:Theme_Upgrader类
*
*@package WordPress
*@子包升级程序
*@自4.6.0起
*/
/**
*用于升级/安装主题的核心类。
*
*它旨在从本地zip、远程zip URL、,
*或上传了zip文件。
*
*@自2.8.0起
*@since 4.6.0已从wp-admin/includes/class-wp-upgrader.php移至其自己的文件。
*
*@参见WP_Upgrader
*/
班
主题升级程序
延伸
WP_升级程序
{
/**
*主题升级产品的结果。
*
*@自2.8.0起
*@var数组|WP_Error$result
*@请参阅WP_Upgrader::$result
*/
公众的
$
结果
;
/**
*是否正在批量升级/安装多个主题。
*
*@自2.9.0起
*@var bool$bulk
*/
公众的
$
大量的
=
假
;
/**
*新主题信息。
*
*@自5.5.0起
*@var数组$new_theme_data
*
*@参见check_package()
*/
公众的
$
新建主题数据
=
阵列
();
/**
*初始化升级字符串。
*
*@自2.8.0起
*/
公众的
功能
升级字符串
() {
$
这
->
串
[
'更新日期'
] = __(
“主题是最新版本。”
);
$
这
->
串
[
'无包'
] = __(
'更新包不可用。'
);
/*转换器:%s:包URL*/
$
这
->
串
[
'下载包'
]=冲刺(__(
'正在从%s…;下载更新'
),
“%s”
);
$
这
->
串
[
'解压缩包'
] = __(
'打开更新包…;'
);
$
这
->
串
[
'删除旧的'
]=__(
'删除主题的旧版本…;'
);
$
这
->
串
[
“remove_old_failed”
] = __(
“无法删除旧主题。”
);
$
这
->
串
[
'进程失败'
] = __(
'主题更新失败。'
);
$
这
->
串
[
'进程成功'
] = __(
'主题更新成功。'
);
}
/**
*初始化安装字符串。
*
*@自2.8.0起
*/
公众的
功能
安装字符串
() {
$
这
->
串
[
'无包'
] = __(
“安装包不可用。”
);
/*转换器:%s:包URL*/
$
这
->
串
[
'下载包'
]=冲刺(__(
'正在从%s…;下载安装包'
),
“%s”
);
$
这
->
串
[
'解压缩包'
] = __(
'打开包…;'
);
$
这
->
串
[
'安装程序包'
] = __(
'安装主题…;'
);
$
这
->
串
[
'删除旧的'
] = __(
'删除主题的旧版本…;'
);
$
这
->
串
[
“remove_old_failed”
] = __(
“无法删除旧主题。”
);
$
这
->
串
[
'无文件'
] = __(
'主题不包含任何文件。'
);
$
这
->
串
[
'进程失败'
] = __(
'主题安装失败。'
);
$
这
->
串
[
'进程成功'
] = __(
'主题安装成功。'
);
/*翻译:1:主题名称,2:主题版本*/
$
这
->
串
[
'进程成功特定'
] = __(
'已成功安装主题<strong>%1$s%2$s</strong>。'
);
$
这
->
串
[
'parent_theme_search'
] = __(
'此主题需要父主题。
检查是否已安装…;'
);
/*翻译:1:主题名称,2:主题版本*/
$
这
->
串
[
'家长_家长_准备_安装'
] = __(
'准备安装<strong>%1$s%2$s</strong>…;'
);
/*翻译:1:主题名称,2:主题版本*/
$
这
->
串
[
“parent_theme_currently_installed”
]===========================================================__(
'父主题<strong>%1$s%2$s</strong>当前已安装。'
);
/*翻译:1:主题名称,2:主题版本*/
$
这
->
串
[
'parent_theme_install_success'
] = __(
'已成功安装父主题,<strong>%1$s%2$s</strong>。'
);
/*转换器:%s:主题名称*/
$
这
->
串
[
'parent_theme_not_found'
]=冲刺(__(
'<strong>找不到父主题</
strong>您需要先安装父主题%s,然后才能使用此子主题。'
),
“<strong>%s</strong>”
);
/*转换器:%s:主题错误*/
$
这
->
串
[
'current_theme_has_errors'
] = __(
'活动主题有以下错误:“%s”。'
);
如果
(!空(
$
这
->
皮肤
->
覆盖
) ) {
如果
(
'更新主题'
===
$
这
->
皮肤
->
覆盖
) {
$
这
->
串
[
'安装程序包'
] = __(
'更新主题…;'
);
$
这
->
串
[
'进程失败'
] = __(
'主题更新失败。'
);
$
这
->
串
[
'进程成功'
] = __(
'主题更新成功。'
);
}
如果
(
'降级主题'
===
$
这
->
皮肤
->
覆盖
) {
$
这
->
串
[
'安装程序包'
]================================================================__(
'降级主题…;'
);
$
这
->
串
[
'进程失败'
] = __(
'主题降级失败。'
);
$
这
->
串
[
'进程成功'
] = __(
'主题降级成功。'
);
}
}
}
/**
*检查是否正在安装子主题,以及是否还需要安装其父主题。
*
*由Theme_upgrader::install()连接到{@请参阅“upgrader_post_install”}筛选器。
*
*@自3.4.0起
*
*@param bool$安装结果
*@param数组$hook_extra
*@param数组$child_result
*@return布尔
*/
公众的
功能
选中父级主题过滤器
(
$
安装结果
,
$
额外挂钩(_E)
,
$
子_结果
) {
//检查是否需要安装父主题。
$
主题_信息
=
$
这
->
主题_信息
();
如果
( !
$
主题_信息
->
起源
() ) {
返回
$
安装结果
;
}
$
这
->
皮肤
->
反馈
(
'parent_theme_search'
);
如果
( !
$
主题_信息
->
起源
()->
错误
() ) {
$
这
->
皮肤
->
反馈
(
“parent_theme_currently_installed”
,
$
主题_信息
->
起源
()->
显示
(
'名称'
),
$
主题_信息
->
起源
()->
显示
(
'版本'
) );
//我们已经有了主题,失败。
返回
$
安装结果
;
}
//我们没有父主题,让我们安装它。
$
应用程序编程接口
=主题_ api(
'主题_信息'
,
阵列
(
“段塞”
=>
$
主题_信息
->
得到
(
'模板'
),
'字段'
=>
阵列
(
'节'
=>
假
,
'标签'
=>
假
,
),
)
);
//节省一点带宽。
如果
( !
$
应用程序编程接口
||is_wp_错误(
$
应用程序编程接口
) ) {
$
这
->
皮肤
->
反馈
(
'parent_theme_not_found'
,
$
主题_信息
->
得到
(
'模板'
) );
//安装后不显示激活或预览操作。
添加筛选器(
'安装主题完成操作'
,
阵列
(
$
这
,
'隐藏激活预览操作'
) );
返回
$
安装结果
;
}
//备份我们要覆盖的所需数据:
$
child_api(子api)
=
$
这
->
皮肤
->
应用程序编程接口
;
$
子成功消息
=
$
这
->
串
[
'进程成功'
];
//覆盖它们。
$
这
->
皮肤
->
应用程序编程接口
=
$
应用程序编程接口
;
$
这
->
串
[
'特定进程成功'
] =
$
这
->
串
[
'parent_theme_install_success'
];
$
这
->
皮肤
->
反馈
(
'parent_theme_prepare_install'
,
$
应用程序编程接口
->
名称
,
$
应用程序编程接口
->
版本
);
添加筛选器(
'install_theme_complete_actions'
,
“__return_false”
,
999
);
//安装主题后不显示任何操作。
//安装父主题。
$
家长_结果
=
$
这
->
运行
(
阵列
(
'包'
=>
$
应用程序编程接口
->
下载链接
,
'目的地'
=>获取_theme_root(),
'清除定义'
=>
假
,
//不要覆盖文件。
'清除工作'
=>
真的
,
)
);
如果
(is_wp_错误(
$
家长_结果
) ) {
添加筛选器(
'安装主题完成操作'
,
阵列
(
$
这
,
'隐藏活动预览操作'
) );
}
//在父级安装后开始清理。
删除过滤器(
'安装主题完成操作'
,
“__return_false”
,
999
);
//重置孩子的结果和数据。
$
这
->
结果
=
$
子_结果
;
$
这
->
皮肤
->
应用程序编程接口
=
$
child_api(子api)
;
$
这
->
串
[
'进程成功'
] =
$
子成功消息
;
返回
$
安装结果
;
}
/**
*不要向用户显示激活和预览操作。
*
*挂接到{@see“install_theme_complete_actions”}筛选器的用户
*安装时Theme_Upgrader::check_parent_Theme_filter()
*子主题,并且安装父主题失败。
*
*@自3.4.0起
*
*@param array$actions预览操作。
*@return数组
*/
公众的
功能
隐藏激活审阅操作
(
$
行动
) {
未设置(
$
行动
[
“激活”
],
$
行动
[
'预览'
] );
返回
$
行动
;
}
/**
*安装主题包。
*
*@自2.8.0起
*@since 3.7.0添加了`$args`参数,使清除更新缓存成为可选。
*
*@param string$package包的完整本地路径或URI。
*@param数组$args{
*可选。
安装主题包的其他参数。
默认空数组。
*
*@type bool$clear_update_cache如果成功,是否清除更新缓存。
*默认为true。
* }
*
*@return bool | WP_Error如果安装成功,则返回True,否则返回false或WP_Error对象。
*/
公众的
功能
安装
(
$
包裹
,
$
参数
=
阵列
()){
$
默认值
=
阵列
(
'清除更新缓存'
=>
真的
,
'覆盖包'
=>
假
,
//不要覆盖文件。
);
$
解析的参数
=wp_parse_args(
$
参数
,
$
默认值
);
$
这
->
初始化
();
$
这
->
安装字符串
();
添加筛选器(
'upgrader_source_selection'
,
阵列
(
$
这
,
'检查包'
) );
添加筛选器(
'升级后安装'
,
阵列
(
$
这
,
'检查父对象主题筛选器'
),
10
,
三
);
如果
(
$
解析参数
[
'清除更新缓存'
] ) {
//清除缓存,以便wp_update_themes()了解新主题。
添加操作(_A)(
'升级程序_处理_完成'
,
'wp_clean_themes_cache'
,
9
,
0
);
}
$
这
->
运行
(
阵列
(
'包'
=>
$
包裹
,
'目的地'
=>获取_theme_root(),
'清除定义'
=>
$
解析的参数
[
'覆盖包'
],
'清除工作'
=>
真的
,
'挂钩_额外'
=>
阵列
(
“类型”
=>
'主题'
,
“操作”
=>
'安装'
,
),
)
);
删除操作(_A)(
'upgrader_process_complete'
,
'wp_clean_themes_cache'
,
9
);
删除筛选器(_F)(
'upgrader_source_selection'
,
阵列
(
$
这
,
'检查包'
) );
删除过滤器(
'升级后安装'
,
阵列
(
$
这
,
'检查父对象主题筛选器'
) );
如果
( !
$
这
->
结果
||is_wp_错误(
$
这
->
结果
) ) {
返回
$
这
->
结果
;
}
//刷新主题更新信息。
wp_clean_themes_cache(
$
解析的参数
[
'清除更新缓存'
] );
如果
(
$
解析参数
[
'覆盖包'
] ) {
/**此操作记录在wp-admin/includes/class-plugin-upgrader.php中*/
操作(_A)(
'upgrader_overrote_package'
,
$
包裹
,
$
这
->
新建主题数据
,
'主题'
);
}
返回
真的
;
}
/**
*升级主题。
*
*@自2.8.0起
*@since 3.7.0添加了`$args`参数,使清除更新缓存成为可选。
*
*@param string$theme主题slug。
*@param数组$args{
*可选。
升级主题的其他论据。
默认空数组。
*
*@type bool$clear_update_cache如果成功,是否清除更新缓存。
*默认为true。
* }
*@return bool | WP_Error如果升级成功,则返回True,否则返回false或WP_Error对象。
*/
公众的
功能
升级
(
$
主题
,
$
参数
=
阵列
() ) {
$
默认值
=
阵列
(
'清除更新缓存'
=>
真的
,
);
$
解析参数
=wp_parse_args(
$
参数
,
$
默认值
);
$
这
->
初始化
();
$
这
->
upgrade_strings(升级字符串)
();
//有可用的更新吗?
$
现在的
=获取站点瞬态(
'更新主题'
);
如果
(!isset(
$
现在的
->
响应
[
$
主题
] ) ) {
$
这
->
皮肤
->
之前
();
$
这
->
皮肤
->
集合_结果
(
假
);
$
这
->
皮肤
->
错误
(
'更新日期'
);
$
这
->
皮肤
->
之后
();
返回
假
;
}
$
第页
=
$
现在的
->
响应
[
$
主题
];
添加筛选器(
'升级_预安装'
,
阵列
(
$
这
,
'当前之前'
),
10
,
2
);
添加筛选器(_F)(
'升级后安装'
,
阵列
(
$
这
,
'当前_之后'
),
10
,
2
);
添加筛选器(
“upgrader_clear_destination”
,
阵列
(
$
这
,
'删除旧主题'
),
10
,
4
);
如果
(
$
解析的参数
[
'清除更新缓存'
] ) {
//清除缓存,以便wp_update_themes()了解新主题。
添加操作(_A)(
'upgrader_process_complete'
,
'wp_clean_themes_cache'
,
9
,
0
);
}
$
这
->
运行
(
阵列
(
'包'
=>
$
第页
[
'包'
],
'目的地'
=>获取主题根(
$
主题
),
'清除目标'
=>
真的
,
'清除工作'
=>
真的
,
'挂钩_额外'
=>
阵列
(
'主题'
=>
$
主题
,
“类型”
=>
'主题'
,
“操作”
=>
'更新'
,
'临时备份'
=>
阵列
(
“段塞”
=>
$
主题
,
'src'
=>获取主题根(
$
主题
),
“目录”
=>
“主题”
,
),
),
)
);
删除操作(_A)(
'upgrader_process_complete'
,
'wp_clean_themes_cache'
,
9
);
删除筛选器(_F)(
'升级_预安装'
,
阵列
(
$
这
,
'当前之前'
) );
删除过滤器(
'升级程序_post_install'
,
阵列
(
$
这
,
'当前_之后'
) );
删除过滤器(
“upgrader_clear_destination”
,
阵列
(
$
这
,
'删除旧主题'
) );
如果
( !
$
这
->
结果
||is_wp_错误(
$
这
->
结果
) ) {
返回
$
这
->
结果
;
}
wp_clean_themes_cache(
$
解析的参数
[
'清除更新缓存'
] );
/*
*通过删除以下内容,确保任何未来自动更新失败都会触发失败电子邮件
*主题更新成功时列表中的最后一个失败通知。
*/
$
过去的失败电子邮件
=获取选项(
'自动插入主题更新邮件'
,
阵列
() );
如果
(发行(
$
过去的失败电子邮件
[
$
主题
] ) ) {
未设置(
$
过去的失败电子邮件
[
$
主题
] );
更新选项(
'自动插入主题更新邮件'
,
$
过去的失败电子邮件
);
}
返回
真的
;
}
/**
*一次升级多个主题。
*
*@自3.0.0起
*@since 3.7.0添加了`$args`参数,使清除更新缓存成为可选。
*
*@global string$wp_version WordPress版本字符串。
*
*@param string[]$themes主题蛞蝓的数组。
*@param数组$args{
*可选。
同时升级多个主题的其他理由。
默认空数组。
*
*@type bool$clear_update_cache如果成功,是否清除更新缓存。
*默认为true。
* }
*@return array[]| false结果数组,如果无法连接到文件系统,则返回false。
*/
公众的
功能
bulk_upgrade(批量升级)
(
$
主题
,
$
参数
=
阵列
() ) {
全球的
$
wp_版本
;
$
默认值
=
阵列
(
'清除更新缓存'
=>
真的
,
);
$
解析的参数
=wp_parse_args(
$
参数
,
$
默认值
);
$
这
->
初始化
();
$
这
->
大量的
=
真的
;
$
这
->
upgrade_strings(升级字符串)
();
$
现在的
=获取站点瞬态(
'更新主题'
);
添加筛选器(_F)(
'升级_预安装'
,
阵列
(
$
这
,
'当前之前'
),
10
,
2
);
添加筛选器(
'升级后安装'
,
阵列
(
$
这
,
'当前_之后'
),
10
,
2
);
添加筛选器(
“upgrader_clear_destination”
,
阵列
(
$
这
,
'删除旧主题'
),
10
,
4
);
$
这
->
皮肤
->
收割台
();
//首先连接到文件系统。
$
物件
=
$
这
->
fs_连接
(
阵列
(
WP_目录_DIR
) );
如果
( !
$
物件
) {
$
这
->
皮肤
->
页脚
();
返回
假
;
}
$
这
->
皮肤
->
bulk_header(隔板)
();
/*
*只有在以下情况下才能启动维护模式:
*-运行多站点,并且指定了一个或多个主题,或者
*-当前正在使用具有可用更新的主题。
*@todo对于多站点,如果可能的话,维护模式应该只适用于单个站点。
*/
$
维修
=(is_multisite()&&!
空(
$
主题
) );
foreach公司
(
$
主题
作为
$
主题
) {
$
维修
=
$
维修
||获取样式表()===
$
主题
||获取模板()===
$
主题
;
}
如果
(
$
维修
) {
$
这
->
维护_模式
(
真的
);
}
$
结果
=
阵列
();
$
这
->
update_count(更新计数)
=计数(
$
主题
);
$
这
->
update_current(更新当前)
=
0
;
foreach公司
(
$
主题
作为
$
主题
) {
++
$
这
->
update_current(更新当前)
;
$
这
->
皮肤
->
主题_信息
=
$
这
->
主题_信息
(
$
主题
);
如果
(!isset)(
$
现在的
->
响应
[
$
主题
] ) ) {
$
这
->
皮肤
->
集合_结果
(
真的
);
$
这
->
皮肤
->
之前
();
$
这
->
皮肤
->
反馈
(
'更新日期'
);
$
这
->
皮肤
->
之后
();
$
结果
[
$
主题
] =
真的
;
持续
;
}
//获取zip文件的URL。
$
第页
=
$
现在的
->
响应
[
$
主题
];
如果
(发行(
$
第页
[
“需要”
] ) && !
兼容wp版本(
$
第页
[
“需要”
] ) ) {
$
结果
=
新的
工作包错误
(
'不兼容的wp_required_version'
,
冲刺(
/*翻译人员:1:当前WordPress版本,2:新主题版本所需的WordPres版本*/
__(
“您的WordPress版本是%1$s,但新的主题版本需要%2$s。”
),
$
wp_版本
,
$
第页
[
“需要”
]
)
);
$
这
->
皮肤
->
之前
(
$
结果
);
$
这
->
皮肤
->
错误
(
$
结果
);
$
这
->
皮肤
->
之后
();
}
埃尔塞夫
(发行(
$
第页
[
'需要_php'
] ) && !
兼容hp版本(
$
第页
[
'需要_php'
] ) ) {
$
结果
=
新的
WP_错误
(
'不兼容_php_required_version'
,
冲刺(
/*转换器:1:当前PHP版本,2:新主题版本所需的PHP版本*/
__(
'服务器上的PHP版本是%1$s,但新的主题版本需要%2$s。'
),
PHP_版本
,
$
第页
[
'需要_php'
]
)
);
$
这
->
皮肤
->
之前
(
$
结果
);
$
这
->
皮肤
->
错误
(
$
结果
);
$
这
->
皮肤
->
之后
();
}
其他的
{
添加筛选器(
'upgrader_source_selection'
,
阵列
(
$
这
,
'检查包'
) );
$
结果
=
$
这
->
运行
(
阵列
(
'包'
=>
$
第页
[
'包'
],
'目的地'
=>获取主题根(
$
主题
),
'清除定义'
=>
真的
,
'清除工作'
=>
真的
,
'是多个'
=>
真的
,
'挂钩_额外'
=>
阵列
(
'主题'
=>
$
主题
,
'临时备份'
=>
阵列
(
“鼻涕虫”
=>
$
主题
,
'src'
=>获取主题根(
$
主题
),
“目录”
=>
“主题”
,
),
),
)
);
删除过滤器(
'upgrader_source_selection'
,
阵列
(
$
这
,
'检查包'
) );
}
$
结果
[
$
主题
] =
$
结果
;
//防止凭据身份验证屏幕多次显示。
如果
(
假
===
$
结果
) {
打破
;
}
}
//每个$themes结束。
$
这
->
维护_模式
(
假
);
//刷新主题更新信息。
wp_clean_themes_cache(
$
解析的参数
[
'清除更新缓存'
] );
/**此操作记录在wp-admin/includes/class-wp-upgrader.php中*/
操作(_A)(
'upgrader_process_complete'
,
$
这
,
阵列
(
“操作”
=>
“更新”
,
“类型”
=>
'主题'
,
“批量”
=>
真的
,
“主题”
=>
$
主题
,
)
);
$
这
->
皮肤
->
bulk_footer(散装脚)
();
$
这
->
皮肤
->
页脚
();
//清理我们的钩子,以防其他东西对此连接进行升级。
删除过滤器(
'升级_预安装'
,
阵列
(
$
这
,
'当前之前'
) );
删除过滤器(
'升级程序_post_install'
,
阵列
(
$
这
,
'当前_之后'
) );
删除过滤器(
“upgrader_clear_destination”
,
阵列
(
$
这
,
'删除主题'
) );
/*
*通过删除以下内容,确保任何未来自动更新失败都会触发失败电子邮件
*主题更新成功时列表中的最后一个失败通知。
*/
$
过去的失败电子邮件
=获取选项(
'自动插入主题更新邮件'
,
阵列
() );
foreach公司
(
$
结果
作为
$
主题
=>
$
结果
) {
//当主题无法手动更新时,维护上次失败通知。
如果
( !
$
结果
||is_wp_错误(
$
结果
) || !
发行(
$
过去的失败电子邮件
[
$
主题
] ) ) {
持续
;
}
未设置(
$
过去的失败电子邮件
[
$
主题
]);
}
更新选项(
'自动插入主题更新邮件'
,
$
过去的失败电子邮件
);
返回
$
结果
;
}
/**
*检查包源是否包含有效的主题。
*
*通过Theme_upgrader::install()连接到{@请参阅“upgrader_source_selection”}筛选器。
*
*@自3.3.0起
*
*@global WP_Filesystem_Base$WP_Filesystem WordPress文件系统子类。
*@global string$wp_version WordPress版本字符串。
*
*@param string$source下载包源的路径。
*@return string | WP_Error传递的源,或失败时的WP_Error对象。
*/
公众的
功能
check_package(检查包)
(
$
来源
) {
全球的
$
wp_文件系统
,
$
wp_版本
;
$
这
->
新主题数据
=
阵列
();
如果
(is_wp_错误(
$
来源
) ) {
返回
$
来源
;
}
//检查文件夹是否包含有效的主题。
$
工作_目录
=位置(
$
wp_文件系统
->
wp_目录目录
(),拖曳斜线(
WP_目录_DIR
),
$
来源
);
如果
(!是目录(
$
工作_目录
) ) {
//信心检查,如果上述操作失败,我们不要阻止安装。
返回
$
来源
;
}
//正确的存档应该在单个子目录中有一个style.css文件。
如果
(!文件存在(
$
工作_目录
。
'样式.css'
) ) {
返回
新的
WP_错误
(
'不兼容_archive_theme_no_style'
,
$
这
->
串
[
'不兼容存档'
],
冲刺(
/*转换器:%s:样式.css*/
__(
'主题缺少%s样式表。'
),
“<code>style.css</code>”
)
);
}
//Theme_Installer_Skin::do_overwrite()上需要所有这些标头。
$
信息
=获取文件数据(
$
工作_目录
。
'样式.css'
,
阵列
(
“名称”
=>
'主题名称'
,
'版本'
=>
'版本'
,
'作者'
=>
'作者'
,
'模板'
=>
'模板'
,
'需要WP'
=>
“至少需要”
,
“需要PHP”
=>
“需要PHP”
,
)
);
如果
(空(
$
信息
[
'名称'
] ) ) {
返回
新的
WP_错误
(
'不兼容_archive_theme_no_name'
,
$
这
->
串
[
'不兼容存档'
],
冲刺(
/*转换器:%s:style.css*/
__(
“%s样式表不包含有效的主题标题。”
),
“<code>style.css</code>”
)
);
}
/*
*父主题必须包含索引文件:
*-经典主题需要/index.php
*-块主题需要/templates/index.html或块模板/indexhtml(已弃用5.9.0)。
*/
如果
(
空(
$
信息
[
'模板'
] ) &&
!
文件存在(_E)(
$
工作目录
。
'索引.php'
) &&
!
文件存在(_E)(
$
工作_目录
。
'模板/index.html'
) &&
!
文件存在(_E)(
$
工作_目录
。
'块模板/index.html'
)
) {
返回
新的
WP_错误
(
'不兼容的_archive_theme_no_index'
,
$
这
->
串
[
'不兼容存档'
],
冲刺(
/*翻译人员:1:templates/index.html,2:index.php,3:文档URL,4:Template,5:style.css*/
__(
'缺少模板。
独立主题需要有%1$s或%2$s模板文件<
a href=“%3$s”>子主题</a>需要在%5$s样式表中有一个%4$s标题。'
),
“<code>templates/index.html</code>”
,
“<code>index.php</code>”
,
__(
'
https://developer.wordpress.org/themes/advanced-topics/child-themes(https://developer.wordpress.org/themes/advanced-topics/child-themes)/
'
),
“<code>模板</code>”
,
“<code>style.css</code>”
)
);
}
$
需要_php
=设置(
$
信息
[
“需要PHP”
] ) ?
$
信息
[
“需要PHP”
] :
无效的
;
$
要求_wp
=设置(
$
信息
[
“需要WP”
] ) ?
$
信息
[
“需要WP”
] :
无效的
;
如果
(!is_php_版本兼容(
$
需要_php
)){
$
错误
=冲刺(
/*翻译:1:当前PHP版本,2:上传主题所需的版本*/
__(
“您服务器上的PHP版本是%1$s,但上传的主题需要%2$s。”
),
PHP_版本
,
$
需要_php
);
返回
新的
WP_错误
(
'不兼容_php_required_version'
,
$
这
->
串
[
'不兼容存档'
],
$
错误
);
}
如果
(!是wp_version_compatible(
$
要求_wp
) ) {
$
错误
=冲刺(
/*翻译:1:当前WordPress版本,2:上传主题所需的版本*/
__(
'你的WordPress版本是%1$s,但上传的主题需要%2$s。'
),
$
wp_版本
,
$
要求_wp
);
返回
新的
WP_错误
(
'不兼容的wp_required_version'
,
$
这
->
串
[
'不兼容_存档'
],
$
错误
);
}
$
这
->
新主题数据
=
$
信息
;
返回
$
来源
;
}
/**
*在尝试升级活动主题之前打开维护模式。
*
*由Theme_upgrader::upgrade()和挂接到{@see“upgrader_pre_install”}过滤器
*Theme_Upgrader::bulk_upgrade()。
*
*@自2.8.0起
*
*@param bool|WP_Error$response安装开始前的安装响应。
*@param array$theme主题参数。
*@return bool | WP_Error原始的`$response`参数或WP_Error。
*/
公众的
功能
当前_之前
(
$
响应
,
$
主题
) {
如果
(is_wp_错误(
$
响应
) ) {
返回
$
响应
;
}
$
主题
=设置(
$
主题
[
'主题'
] ) ?
$
主题
[
'主题'
]以下为:
''
;
//仅在主题处于活动状态时运行。
如果
(获取样式表()==
$
主题
) {
返回
$
响应
;
}
//更改为维护模式。
批量编辑单独处理此问题。
如果
( !
$
这
->
大量的
) {
$
这
->
维护_模式
(
真的
);
}
返回
$
响应
;
}
/**
*升级活动主题后关闭维护模式。
*
*由Theme_upgrader::upgrade()连接到{@请参阅“upgrader_post_install”}筛选器
*和Theme_Upgrader::bulk_upgrade()。
*
*@自2.8.0起
*
*@param bool | WP_Error$response安装完成后的安装响应。
*@param array$theme主题参数。
*@return bool | WP_Error原始的`$response`参数或WP_Error。
*/
公众的
功能
当前(_A)之后
(
$
响应
,
$
主题
) {
如果
(is_wp_错误(
$
响应
) ) {
返回
$
响应
;
}
$
主题
=设置(
$
主题
[
'主题'
])?
$
主题
[
'主题'
] :
''
;
//仅在主题处于活动状态时运行。
如果
(获取样式表()==
$
主题
) {
返回
$
响应
;
}
//确保升级后样式表名称没有更改:
如果
(获取样式表()===
$
主题
&&
$
主题
!==
$
这
->
结果
[
'目的地名称'
] ) {
wp_clean_themes_cache();
$
样式表
=
$
这
->
结果
[
'目的地名称'
];
切换主题(_theme)(
$
样式表
);
}
//删除维护模式的时间。
批量编辑单独处理此问题。
如果
( !
$
这
->
大量的
) {
$
这
->
维护模式
(
假
);
}
返回
$
响应
;
}
/**
*在升级期间删除旧主题。
*
*通过Theme_upgrader::upgrade()连接到{@请参阅“upgrader_clear_destination”}筛选器
*和Theme_Upgrader::bulk_upgrade()。
*
*@自2.8.0起
*
*@global WP_Filesystem_Base$WP_Filesystem子类
*
*@param bool$已删除
*@param字符串$local_destination
*@param字符串$remote_destination
*@param数组$theme
*@return布尔
*/
公众的
功能
删除旧主题
(
$
远离的
,
$
本地_目的地
,
$
远程_目标
,
$
主题
) {
全球的
$
wp_文件系统
;
如果
(is_wp_error)(
$
远离的
) ) {
返回
$
远离的
;
//传递错误。
}
如果
(!isset(
$
主题
[
'主题'
])){
返回
$
远离的
;
}
$
主题
=
$
主题
[
'主题'
];
$
主题_目录
=拖曳斜线(
$
wp_文件系统
->
wp_themes_dir
(
$
主题
) );
如果
(
$
wp_文件系统
->
存在
(
$
主题_目录
。
$
主题
) ) {
如果
( !
$
wp_文件系统
->
删除
(
$
主题_目录
。
$
主题
,
真的
) ) {
返回
假
;
}
}
返回
真的
;
}
/**
*获取主题的WP_Theme对象。
*
*@自2.8.0起
*@since 3.0.0添加了`$theme`参数。
*
*@param string$theme主题的目录名。
这是可选的,如果没有提供,
*将使用最后一个结果中的目录名。
*@return WP_Theme | false未提供主题的信息对象或false“$Theme”
*最后一个结果还没有确定。
*/
公众的
功能
主题_信息
(
$
主题
=
无效的
) {
如果
(空(
$
主题
) ) {
如果
(!空(
$
这
->
结果
[
'目的地名称'
] ) ) {
$
主题
=
$
这
->
结果
[
'目的地名称'
];
}
其他的
{
返回
假
;
}
}
$
主题
=wp_get_theme(
$
主题
);
$
主题
->
缓存_删除
();
返回
$
主题
;
}
}
此时无法执行该操作。