使WordPress成为核心

变更集48390


忽略:
时间戳:
2020年7月7日下午05:47:37(4年(之前)
作者:
阿佐兹
消息:

升级/安装:允许从上传的.zip文件更新插件和主题。

道具马里奥瓦尼、网络流浪汉、伊玛斯、肖南德鲁斯、马里奥瓦尔尼、恩贾姆、德斯罗什、dd32、福莱托、瑞士斯皮迪、梅尔乔伊斯、彭托、约书亚沃尔德、psykro、clorith、ahortin、galbaras、pingram3541、joyly、doobeedoo、karmatosed、poena、whyisjake、恩贾姆、谢尔盖比里约科夫、audrasjb、azozz。

修复#9757.

位置:
中继/src/wp-admin
文件:
10编辑

图例:

未修改
补充
远离的
  • trunk/src/wp-admin/css/themes.css

    r48143 48390兰特  
    985985------------------------------------------------------------------------------*/
    986986
     987.update-php.wrap{
     988最大宽度:40雷姆;
     989}
     990
    987991/*已安装主题*/
    988992.theme-browser.theme-theme已安装{
    989993背景:#0073aa;
    990994}
     995
    991996.theme-browser.theme.notice-success p:之前{
    992997颜色:#79ba49;
     
    10311036位置:相对;
    10321037顶部:10px;
    1033 }
    1034 
    1035 .上传插件包装{
    1036 显示:无;
     1038文本对齐:居中;
    10371039}
    10381040
     
    10501052填充:30px;
    10511053边距:30px自动;
    1052 最大宽度:380px;
    1053 显示:flex;
     1054显示:内联-灵活;
    10541055justify-content:space-between;
    10551056对齐项目:居中;
     1057}
     1058
     1059.upload-theme.wp-upload-form输入[类型=“文件”],
     1060.upload-plugin.wp-upload-form输入[类型=“文件”]{
     1061边距-右:10px;
    10561062}
    10571063
     
    10941100字体大小:15像素;
    10951101填充:20px 0 0;
    1096 文本对齐:左;
    10971102    }
    10981103}
     
    11151120显示:块;
    11161121线高:1.9;
     1122}
     1123
     1124.上传比较更新{
     1125border-top:1px固体#ddd;
     1126border-bottom:1px实心#ddd;
     1127文本对齐:左;
     1128余量:1雷姆0 1.4雷姆;
     1129边界崩塌:崩塌;
     1130宽度:100%;
     1131}
     1132
     1133.update-from-upload-comparison tr:last-child td更新{
     1134高度:1.4rem;
     1135垂直对齐:顶部;
     1136}
     1137
     1138.update-from-upload-comparison tr:第一个孩子th{
     1139font-weight:粗体;
     1140高度:1.4rem;
     1141垂直对齐:底部;
     1142}
     1143
     1144.update-from-upload-comparison td.name标签{
     1145文本对齐:右;
     1146}
     1147
     1148来自上传比较td的更新,
     1149.update-from-upload-comparison th更新{
     1150填充:0.4雷姆1.4雷姆;
     1151}
     1152
     1153.update-from-upload-比较td.warning{
     1154颜色:#a00;
     1155}
     1156
     1157。从上载操作更新{
     1158边缘顶部:1.4雷姆;
    11171159}
    11181160
  • trunk/src/wp-admin/includes/class-plugin-installer-skin.php

    47808兰特 48390兰特  
    1919公共$api;
    2020公共$type;
     21公共$url;
     22公共$overwrite;
     23
     24private$is_downgrading=false;
    2125
    2226    /**
     
    2529公共函数__construct($args=array()){
    2630$defaults=数组(
    27 “type”=>“web”,
    28 “url”=>“”,
    29 “插件”=>“”,
    30 “nonce”=>“”,
    31 “标题”=>“”,
     31“type”=>“web”,
     32“url”=>“”,
     33“插件”=>“”,
     34“nonce”=>“”,
     35“标题”=>“”,
     36“覆盖”=>“”,
    3237        );
    3338$args=wp_parse_args($args,$defaults);
    3439
    35 $this->类型=$args['type'];
    36 $this->api=isset($args['api'])$args['api']:数组();
     40$this->类型=$args['type'];
     41$this->url=$args['url'];
     42$this->api=isset($args['api'])$args['api']:数组();
     43$this->overwrite=$args['overwrite'];
    3744
    3845父级::__construct($args);
     
    4451if(!空($this->api)){
    4552$this->upgrader->strings['process_success']=sprintf(
    46 /*转换器:1:插件名称,2:插件版本*/
    47 __('已成功安装插件<strong>%1$s%2$s</strong>。'),
     53$this->upgrader->strings['process_success_specific'],
    4854$this->api->名称,
    4955$this->api->版本
     
    5359
    5460    /**
     61*通过上传zip文件更新插件时隐藏“process_failed”错误。
     62     *
     63*@自5.5.0起
     64     *
     65*@param$wp_error wp_error。
     66*@return bool
     67     */
     68公共函数hide_process_failed($wp_error){
     69如果(
     70'upload'===$this->类型&&
     71“”===$this->覆盖&&
     72$wp_error->get_error_code()===“文件夹存在”
     73        ) {
     74返回true;
     75        }
     76
     77返回false;
     78    }
     79
     80    /**
    5581     */
    5682公共函数after(){
     83//检查插件是否可以被覆盖并输出HTML。
     84if($this->do_overwrite()){
     85回报;
     86        }
     87
    5788$plugin_file=$this->upgrader->plugin.info();
    5889
     
    118149if(!$this->result||iswp_error($this->result)){
    119150取消设置($install_actions['activate_plugin'],$install-actions['网络激活']);
    120 }elseif(!current_user_can('activate_plugin',$plugin_file)) {
     151}elseif(!current_user_can('activate_plugin',$plugin_file)||is_plugin_active($plugin_file)) {
    121152取消设置($install_actions['activate_plugin']);
    122153        }
     
    139170}
    140171    }
     172
     173    /**
     174*检查插件是否可以被覆盖,并输出HTML以在上传时覆盖插件。
     175     *
     176*@自5.5.0起
     177     *
     178*@return bool是否可以覆盖插件并输出HTML。
     179     */
     180私有函数do_overwrite(){
     181if('upload'!==$this->type||!iswp_error($this->结果)||'folder_exists'!==$此->结果->获取错误代码()){
     182返回false;
     183        }
     184
     185$folder=$this->result->get_error_data('folder_exists');
     186$folder=ltrim(子文件夹($folder,strlen(WP_PLUGIN_DIR)),“/”);
     187
     188$current_plugin_data=假;
     189foreach(get_plugins()作为$plugin=>$pluging_data){
     190if(strrpos($plugin,$folder)!==0){
     191继续;
     192            }
     193
     194$current_plugin_data=$plugin_data;
     195        }
     196
     197if(空($current_plugin_data)||empty($this->upgrader->new_plugin.data)){
     198返回false;
     199        }
     200
     201echo'<h2 class=“update-from-upload-heading”>'。esc_html(__('此插件已安装。'))。'</h2>';
     202
     203$this->is_downgrading=version_compare($current_plugin_data['version'],$this->upgrader->new_plugin.data['version'],'>');
     204
     205$rows=数组(
     206“名称”=>__(“插件名称”),
     207“版本”=>__(“版本”),
     208“作者”=>__(“作者”),
     209“RequiresWP”=>__(“所需WordPress版本”),
     210'需要PHP'=>__('需要的PHP版本'),
     211        );
     212
     213$table='<table class=“update-from-upload-comparison”><tbody>';
     214$table.='<tr><th></th><th>'。esc_html(__('当前'))。'</th>';
     215$table.='<th>’。esc_html(__('上传'))。'</th></tr>';
     216
     217$is_same_plugin=true;//让我们只考虑这些行
     218foreach($rows作为$field=>$label){
     219$old_value=!空($current_plugin_data[$field])$current_plugin_data[$field]:'-';
     220$new_value=!空($this->upgrader->new_plugin_data[$field])$this->upgrader->new_plugin_data[$field]:'-';
     221
     222$is_same_plugin=$is_same _plugin&&($old_value===$new_value);
     223
     224$diff_field=('Version'!==$field&&$new_value!==$old_value);
     225$diff_version=(“版本”===$field&&$this->is_downgrading);
     226
     227$table.='<tr><td class=“name-label”>'$标签。'</td><td>”。esc_html($old_value)。'</td>';
     228$表.=($diff字段||$diff版本)?'<td class=“warning”>':'<td>';
     229$表.=esc_html($new_value)。'</td></tr>';
     230        }
     231
     232$table.='</tbody></table>';
     233
     234        /**
     235*过滤比较表输出,以便在上传时覆盖插件包。
     236         *
     237*@自5.5.0起
     238         *
     239*@param string$table带有Name、Version、Author、RequiresWP和RequiresPHP info的输出表。
     240*@param array$current_plugin_data具有当前插件数据的数组。
     241*@param array$new_plugin_data数组,包含上载的插件数据。
     242         */
     243echo apply_filters(“install_plugin_ovewrite_comparation”,$table,$current_plugin_data,$this->upgrader->new_plugin.data);
     244
     245$install_actions=数组();
     246$can_update=true;
     247
     248$blocked_message=“<p>”。esc_html(__('由于以下原因无法更新插件:'))。'</p> ';
     249$blocked_message.='<ul class=“ul-disc”>';
     250
     251如果(
     252            ! 空($this->upgrader->new_plugin_data['RequiresPHP'])&&
     253版本比较(phpversion(),$this->upgrader->new_plugin_data['RequiresPHP'],'<')
     254        ) {
     255$error=冲刺(
     256/*转换器:1:当前PHP版本,2:上传插件所需的版本*/
     257__('您服务器上的PHP版本是%1$s,但上传的插件需要%2$s。'),
     258php版本(),
     259$this->upgrader->new_plugin_data[“需要PHP”]
     260            );
     261
     262$blocked_message.='<li>’。esc_html($error)。'</li>';
     263$can_update=false;
     264        }
     265
     266如果(
     267            ! 空($this->upgrader->new_plugin_data['RequiresWP'])&&
     268版本比较($GLOBALS['wp_version'],$this->upgrader->new_plugin_data['RequiresWP'],'<')
     269        ) {
     270$error=冲刺(
     271/*翻译人员:1:当前WordPress版本,2:上传插件所需的版本*/
     272__('你的WordPress版本是%1$s,但上传的插件需要%2$s。'),
     273$GLOBALS['wp_version'],
     274$this->升级程序->new_plugin_data[“需要WP”]
     275            );
     276
     277$blocked_message.='<li>’。esc_html($error)。'</li>';
     278$can_update=false;
     279        }
     280
     281$blocked_message.='</ul>';
     282
     283if($can_update){
     284if($this->is_downgrading){
     285$warning=__('您正在上传当前插件的旧版本。您可以继续安装旧版本,但请确保<a href=“https://wordpress.org/support/article/wordpress-backups/“>首先备份数据库和文件。”);
     286}其他{
     287$warning=__('您正在更新插件。请确保<a href=“https://wordpress.org/support/article/wordpress-backups/“>首先备份数据库和文件。”);
     288            }
     289
     290echo'<p class=“update-from-upload-notice”>'$警告。”</p> ';
     291
     292$overwrite=$this->is_downgrading?'downgrade-plugin':'更新-plugin';
     293
     294$install_actions['ovewrite_plugin']=冲刺(
     295'<a class=“button button-primary”href=“%s”target=“_parent”>%s</a>',
     296wp_nonce_url(add_query_arg('overwrite',$overwrite,$this->url),'plugin-upload'),
     297esc_html(__('用上传内容替换当前内容'))
     298            );
     299}其他{
     300echo$blocked_message;
     301        }
     302
     303$install_actions['plugins_page']=冲刺(
     304'<a class=“button”href=“%s”>%s</a>',
     305self_admin_url('plugin-install.php'),
     306__('取消并返回')
     307        );
     308
     309        /**
     310*过滤单个插件安装失败后可用的操作链接列表,但允许ovewrite。
     311         *
     312*@自5.5.0起
     313         *
     314*@param string[]$install_actions插件操作链接数组。
     315*@param object$api包含WordPress.org api插件数据的对象。
     316*@param array$new_plugin_data数组,包含上载的插件数据。
     317         */
     318$install_actions=apply_filters(“install_plugin_ovewrite_actions”,$install_actions,$this->api,$this->upgrader->new_plugin_data);
     319
     320if(!空($install_actions)){
     321echo'<p class=“update-from-upload-actions”>'。内爆(“”,(数组)$install_actions)。'</p> ';
     322        }
     323
     324返回true;
     325    }
    141326}
  • trunk/src/wp-admin/includes/class-plugin-upgrader.php

    47814兰特 48390兰特  
    4040
    4141    /**
     42*新插件信息。
     43     *
     44*@自5.5.0起
     45*@var数组$new_plugin_data
     46     *
     47*@参见check_package()
     48     */
     49public$new_plugin_data=数组();
     50
     51    /**
    4252*初始化升级字符串。
    4353     *
     
    5565$this->strings['process_success']=__('插件更新成功。');
    5666$this->strings['process_bulk_success']=__('插件更新成功。');
     67
     68/*转换器:1:插件名称,2:插件版本*/
     69$this->strings['process_success_specific']=__('成功安装插件<strong>%1$s%2$s</strong>。');
    5770    }
    5871
     
    6881$this->strings['unpack_package']=__('打开包&#8230;');
    6982$this->strings['installing_package']=__('安装插件&#8230;');
     83$this->strings['remove_old']=__('删除当前插件&#8230;');
     84$this->strings['remove_old_failed']=__('无法删除当前插件。');
    7085$this->strings['no_files']=__('插件不包含文件。');
    7186$this->strings['process_failed']=__('插件安装失败。');
    7287$this->strings['process_success']=__('插件安装成功。');
     88
     89if(!空($this->skin->overwrite)){
     90if(“update-plugin”===$this->skin->overwrite){
     91$this->strings['installing_package']=__('更新插件&#8230;');
     92$this->strings['process_failed']=__('插件更新失败。');
     93$this->strings['process_success']=__('插件更新成功。');
     94            }
     95
     96if('downgrade-plugin'===$this->skin->overwrite){
     97$this->strings['installing_package']=__('降级插件&#8230;');
     98$this->string['process_failed']=__('插件降级失败');
     99$this->strings['process_success']=__('插件降级成功。');
     100            }
     101        }
    73102    }
    74103
     
    89118     */
    90119公共函数安装($package,$args=array()){
    91 
    92120$defaults=数组(
    93121“clear_update_cache”=>true,
     122“overwrite_package”=>false,//不覆盖文件。
    94123        );
    95124$parsed_args=wp_parse_args($args,$defaults);
     
    108137“package”=>$package,
    109138“目的地”=>WP_PLUGIN_DIR,
    110 '清除定义'=>false,//不要覆盖文件。
     139'清除定义'=>$parsed_args[“覆盖包”],
    111140“clear_working”=>true,
    112141“hook_extra”=>数组(
     
    127156wp_clean_plugins_cache($parsed_args['clear_update_cache']);
    128157
     158if($parsed_args['overwrite_package']){
     159            /**
     160*当升级程序成功覆盖当前安装的
     161*带有上传zip包的插件或主题。
     162             *
     163*@自5.5.0起
     164             *
     165*@param string$package包文件。
     166*@param array$new_plugin_data新插件数据。
     167*@param string$package_type包类型(插件或主题)。
     168             */
     169do_action(“upgrader_overrote_package”,$package,$this->new_plugin_data,“plugin”);
     170        }
     171
    129172返回true;
    130173    }
     
    146189     */
    147190公共函数升级($plugin,$args=array()){
    148 
    149191$defaults=数组(
    150192“clear_update_cache”=>true,
     
    224266     */
    225267公共函数bulk_update($plugins,$args=array()){
    226 
    227268$defaults=数组(
    228269“clear_update_cache”=>true,
     
    350391全局$wp_filesystem;
    351392
     393$this->new_plugin_data=array();
     394
    352395if(iswp_error($source)){
    353396返回$source;
     
    360403
    361404//检查文件夹是否至少包含一个有效插件。
    362 $plugins_found=假;
    363 $files=glob($working_directory.'*.php');
     405$files=glob($working_directory.'*.php');
    364406if($个文件){
    365407foreach($files作为$file){
    366408$info=获取plugin_data($file,false,false);
    367409if(!空($info['Name'])){
    368                     $plugins_found=真;
     410                    $this->new_plugin_data=$info;
    369411断裂;
    370412                }
     
    372414        }
    373415
    374 如果(! $找到插件) {
     416如果(空($this->new_plugin_data)) {
    375417return new WP_Error(“incompatible_archive_no_plugins”,$this->strings['incompatiable_archive'],__(“找不到有效插件。”);
    376418        }
  • trunk/src/wp-admin/includes/class-theme-installer-skin.php

    47219兰特 48390卢比  
    1919公共$api;
    2020公共$type;
     21公共$url;
     22公共$overwrite;
     23
     24private$is_downgrading=false;
    2125
    2226    /**
     
    2529公共函数__construct($args=array()){
    2630$defaults=数组(
    27 “type”=>“web”,
    28 “url”=>“”,
    29 '主题'=>'',
    30 “nonce”=>“”,
    31 “标题”=>“”,
     31“type”=>“web”,
     32“url”=>“”,
     33'主题'=>'',
     34“nonce”=>“”,
     35'title'=>'',
     36“覆盖”=>“”,
    3237        );
    3338$args=wp_parse_args($args,$defaults);
    3439
    35 $this->类型=$args['type'];
    36 $this->api=isset($args['api'])$args['api']:数组();
     40$this->类型=$args['type'];
     41$this->url=$args['url'];
     42$this->api=isset($args['api'])$args['api']:数组();
     43$this->overwrite=$args['overwrite'];
    3744
    3845父级::__construct($args);
     
    5259
    5360    /**
     61*通过上载zip文件更新主题时隐藏“process_failed”错误。
     62     *
     63*@自5.5.0起
     64*
     65*@param$wp_error wp_error。
     66*@return bool
     67     */
     68公共函数hide_process_failed($wp_error){
     69如果(
     70'upload'===$this->类型&&
     71“”===$this->覆盖&&
     72$wp_error->get_error_code()===“文件夹存在”
     73        ) {
     74返回true;
     75        }
     76
     77返回false;
     78    }
     79
     80    /**
    5481     */
    5582公共函数after(){
     83if($this->do_overwrite()){
     84回报;
     85        }
     86
    5687if(空($this->upgrader->result['destination_name']){
    5788回报;
     
    131162if(!$this->result||is_wp_error($this->result)||is_network_admin()||!current_user_can('切换主题'){
    132163取消设置($install_actions['activate'],$install-actions[`preview']);
     164}elseif(get_option('template')===$stylesheet){
     165取消设置($install_actions['activate']);
    133166        }
    134167
     
    148181}
    149182    }
     183
     184    /**
     185*检查主题是否可以被覆盖,并输出HTML以在上传时覆盖主题。
     186     *
     187*@自5.5.0起
     188     *
     189*@return bool是否可以覆盖主题并输出HTML。
     190     */
     191私有函数do_overwrite(){
     192if('upload'!==$this->type||!iswp_error($this->结果)||'folder_exists'!==$此->结果->获取错误代码()){
     193返回false;
     194        }
     195
     196$folder=$this->result->get_error_data('folder_exists');
     197$folder=rtrim($folder,'/');
     198
     199$current_theme_data=false;
     200$all_themes=wp_get_themes(数组('errors'=>null));
     201
     202foreach($all_themes作为$theme){
     203if(rtrim($theme->get_stylesheet_directory(),'/')!==$文件夹){
     204继续;
     205            }
     206
     207$current_theme_data=$theme;
     208        }
     209
     210if(空($current_theme_data)||empty($this->upgrader->new_theme-data)){
     211返回false;
     212        }
     213
     214echo'<h2 class=“update-from-upload-heading”>'。esc_html(__('此主题已安装。'))。'</h2>';
     215
     216//检查当前主题的错误
     217if(is_wp_error($current_theme_data->errors())){
     218$this->反馈('current_theme_has_errors',$current_theme_data->errors()->get_error_message());
     219        }
     220
     221$this->is_downgrading=version_compare($current_theme_data['version'],$this->升级程序->new_theme_data['version'],'>');
     222
     223$is_invalid_parent=假;
     224if(!空($this->upgrader->new_theme_data['Template']){
     225$is_invalid_parent=!in_array($this->upgrader->new_theme_data['Template'],array_keys($all_themes),true);
     226        }
     227
     228$rows=数组(
     229“名称”=>__(“主题名称”),
     230“版本”=>__(“版本”),
     231“作者”=>__(“作者”),
     232“RequiresWP”=>__(“所需WordPress版本”),
     233“RequiresPHP”=>__(“所需PHP版本”),
     234“模板”=>__(“父主题”),
     235        );
     236
     237$table='<table class=“update-from-upload-comparison”><tbody>';
     238$table.='<tr><th></th><th>’。esc_html(__('当前'))。'</th><th>’。esc_html(__('上传'))。'</th></tr>';
     239
     240$is_same_theme=true;//让我们只考虑这些行
     241foreach($rows作为$field=>$label){
     242$old_value=$current_theme_data->display($field,false);
     243$old_value=$old_value$旧值:'-';
     244
     245$new_value=!空($this->upgrader->new_theme_data[$field])$this->upgrader->newtheme_data[$field]:'-';
     246
     247if($old_value===$new_value&&‘-’====$新值&&‘模板’===$字段){
     248继续;
     249            }
     250
     251$is_same_theme=$is_same_theme&&($old_value==$new_value);
     252
     253$diff_field=('版本'!==$field&&$new_value!==$旧值);
     254$diff_version=(“版本”===$field&&$this->is_downgrading);
     255$invalid_parent=false;
     256
     257if(“模板”===$field&&$is_invalid_parent){
     258$invalid_parent=true;
     259$new_value.=“”__(“(未找到)”);
     260            }
     261
     262$table.='<tr><td class=“name label”>'$标签。'</td><td>”。esc_html($old_value)。'</td>';
     263$表.=($diff字段||$diff版本||$invalid_parent)?'<td class=“warning”>':'<td>';
     264$表.=esc_html($new_value)。'</td></tr>';
     265        }
     266
     267$table.='</tbody></table>';
     268
     269        /**
     270*过滤比较表输出,以便在上传时覆盖主题包。
     271         *
     272*@自5.5.0起
     273         *
     274*@param string$table带有Name、Version、Author、RequiresWP和RequiresPHP info的输出表。
     275*@param array$current_theme_data具有当前主题数据的数组。
     276*@param array$new_theme_data数组,包含上载的主题数据。
     277         */
     278echo apply_filters('install_theme_override_comparation',$table,$current_theme_data,$this->upgrader->new_theme_data);
     279
     280$install_actions=数组();
     281$can_update=true;
     282
     283$blocked_message=“<p>”。esc_html(__('主题因以下原因无法更新:'))。'</p> ';
     284$blocked_message.='<ul class=“ul-disc”>';
     285
     286if(!empty($this->upgrader->new_theme_data['RequiresPHP'])&&version_compare(phpversion(),$this->upgrader->new_themes_data['RequiresPHP'],'<')){
     287$error=冲刺(
     288/*转换器:1:当前PHP版本,2:上传主题所需的版本*/
     289__('您服务器上的PHP版本是%1$s,但上传的主题需要%2$s。'),
     290phpversion(),
     291$this->upgrader->new_theme_data[“需要PHP”]
     292            );
     293
     294$blocked_message.='<li>’。esc_html($error)。'</li>';
     295$can_update=false;
     296        }
     297
     298如果(!empty($this->upgrader->new_theme_data['RequiresWP'])&&version_compare($GLOBALS['wp_version'],$this->upgrader->new_themes_data['RequiresWD'],'<')){
     299$error=冲刺(
     300/*翻译人员:1:当前WordPress版本,2:上传主题所需的版本*/
     301__('您的WordPress版本是%1$s,但上传的主题需要%2$s。'),
     302$GLOBALS['wp_version'],
     303$this->升级程序->new_theme_data[“需要WP”]
     304            );
     305
     306$blocked_message.='<li>’。esc_html($error)。'</li>';
     307$can_update=false;
     308        }
     309
     310$blocked_message.='</ul>';
     311
     312如果($can_update){
     313if($this->is_downgrading){
     314$warning=__('您正在上传当前主题的旧版本。您可以继续安装旧版本,但请确保<a href=“https://wordpress.org/support/article/wordpress-backups/“>首先备份数据库和文件。”);
     315}其他{
     316$warning=__('您正在更新主题。请确保<a href=“https://wordpress.org/support/article/wordpress-backups/“>首先备份数据库和文件。”);
     317            }
     318
     319echo'<p class=“update-from-upload-notice”>'$警告。”</p> ';
     320
     321$overwrite=$this->is_downgrading?'降级主题':'更新主题';
     322
     323$install_actions['ovewrite_theme']=冲刺(
     324'<a class=“button button-primary”href=“%s”target=“_parent”>%s</a>',
     325wp_nonce_url(add_query_arg(“覆盖”,$overwrite,$this->url),“主题上传”),
     326esc_html(__('用上传内容替换当前内容'))
     327            );
     328}其他{
     329echo$blocked_message;
     330        }
     331
     332$install_actions['themes_page']=冲刺(
     333'<a class=“button”href=“%s”target=“_parent”>%s</a>',
     334self_admin_url('theme-install.php'),
     335__('取消并返回')
     336);
     337
     338        /**
     339*过滤单个主题安装失败但允许ovewrite后可用的操作链接列表。
     340         *
     341*@自5.5.0起
     342         *
     343*@param string[]$install_actions主题操作链接数组。
     344*@param object$api包含WordPress.org api主题数据的对象。
     345*@param array$new_theme_data数组,包含上载的主题数据。
     346         */
     347$install_actions=apply_filters('install_theme_ovewrite_actions',$install_actions,$this->api,$this->upgrader->new_theme_data);
     348
     349if(!空($install_actions)){
     350echo'<p class=“update-from-upload-actions”>'。内爆(“”,(数组)$install_actions)</p> ';
     351        }
     352
     353返回true;
     354    }
     355
    150356}
  • trunk/src/wp-admin/includes/class-theme-upgrader.php

    47814兰特 48390卢比  
    3939
    4040    /**
     41*新主题信息。
     42     *
     43*@自5.5.0起
     44*@var数组$new_theme_data
     45     *
     46*@参见check_package()
     47     */
     48public$new_theme_data=array();
     49
     50    /**
    4151*初始化升级字符串。
    4252     *
     
    6676$this->strings['unpack_package']=__('打开包&#8230;');
    6777$this->strings['installing_package']=__('安装主题&#8230;');
     78$this->strings['remove_old']=__('删除旧版本的主题&#8230;');
     79$this->strings['remove_old_failed']=__('无法删除旧主题。');
    6880$this->strings['no_files']=__('主题不包含文件。');
    6981$this->strings['process_failed']=__('主题安装失败。');
     
    8092/*转换器:%s:主题名称*/
    8193$this->string['parent_theme_not_found']=sprintf(__('<strong>找不到父主题。</strong>您需要安装父主题%s,然后才能使用此子主题。'),'<strong>%s</strong>');
     94/*转换器:%s:主题错误*/
     95$this->strings['current_theme_has_errors']=__('当前主题有以下错误:“%s”.');
     96
     97if('update-theme'===$this->skin->overwrite){
     98$this->strings['installing_package']=__('更新主题&#8230;');
     99$this->strings['process_failed']=__('主题更新失败。');
     100$this->strings['process_success']=__('主题更新成功。');
     101        }
     102
     103if(“降级主题”===$this->skin->overwrite){
     104$this->strings['installing_package']=__('降级主题&#8230;');
     105$this->strings['process_failed']=__('主题降级失败。');
     106$this->strings['process_success']=__('主题降级成功。');
     107        }
    82108    }
    83109
     
    201227     */
    202228公共函数安装($package,$args=array()){
    203 
    204229$defaults=数组(
    205230“clear_update_cache”=>true,
     231'overwrite_package'=>false,//不覆盖文件。
    206232        );
    207233$parsed_args=wp_parse_args($args,$defaults);
     
    221247“package”=>$package,
    222248“目的地”=>get_theme_root(),
    223 “清除目标”=>false,//不要覆盖文件。
     249'清除定义'=>$args['overwrite_package'],
    224250“clear_working”=>true,
    225251“hook_extra”=>数组(
     
    241267wp_clean_themes_cache($parsed_args['clear_update_cache']);
    242268
     269if($parsed_args['overwrite_package']){
     270            /**
     271*当升级程序成功覆盖当前安装的
     272*带有上传zip包的插件或主题。
     273             *
     274*@自5.5.0起
     275             *
     276*@param string$package包文件。
     277*@param array$new_plugin_data新主题数据。
     278*@param string$package_type包类型(插件或主题)。
     279*/
     280do_action(“upgrader_overrote_package”,$package,$this->new_theme_data,“theme”);
     281        }
     282
    243283返回true;
    244284    }
     
    260300     */
    261301公共函数升级($theme,$args=array()){
    262 
    263302$defaults=数组(
    264303“clear_update_cache”=>true,
     
    333372     */
    334373公共函数bulk_upgrade($themes,$args=array()){
    335 
    336374$defaults=数组(
    337375“clear_update_cache”=>true,
     
    462500全局$wp_filesystem;
    463501
     502$this->new_theme_data=array();
     503
    464504if(iswp_error($source)){
    465505返回$source;
     
    485525        }
    486526
     527//Theme_Installer_Skin::do_overwrite()上需要所有这些标头。
    487528$info=获取文件数据(
    488529$working_directory。”样式.css',
    489530阵列(
    490 “名称”=>“主题名称”,
    491 '模板'=>'模板',
     531“名称”=>“主题名称”,
     532“版本”=>“版本”,
     533“作者”=>“作者”,
     534“模板”=>“模板”,
     535“RequiresWP”=>“至少需要”,
     536“RequiresPHP”=>“Requires PHP”,
    492537            )
    493538        );
     
    518563        }
    519564
     565$this->new_theme_data=$info;
    520566返回$source;
    521567    }
     
    641687     */
    642688公共函数theme_info($theme=null){
    643 
    644689if(空($theme)){
    645690if(!空($this->result['destination_name']){
     
    649694            }
    650695        }
    651 返回wp_get_theme($theme);
     696
     697$theme=wp_get_theme($theme);
     698$theme->cache_delete();
     699
     700return$theme;
    652701    }
    653702
  • trunk/src/wp-admin/includes/class-wp-upgrader-skin.php

    47060兰特 48390兰特  
    206206     */
    207207公共函数bulk_footer(){}
     208
     209    /**
     210*通过上载zip文件进行更新时隐藏“process_failed”错误消息。
     211     *
     212*@自5.5.0起
     213*
     214*@参数$wp_error wp_error
     215*@return bool
     216     */
     217公共函数hide_process_failed($wp_error){
     218返回false;
     219    }
    208220}
  • trunk/src/wp-admin/includes/class-wp-upgrader.php

    48110兰特 48390兰特  
    799799if(iswp_error($result)){
    800800$this->skin->error($result);
    801 $this->skin->反馈(“process_failed”);
     801
     802如果(!method_exists($this->skin,'hide_process_failed')|$此->皮肤->隐藏进程失败($result)){
     803$this->skin->反馈(“process_failed”);
     804            }
    802805}其他{
    803806//安装成功。
  • trunk/src/wp-admin/includes/plugin-install.php

    48281兰特 48390兰特  
    354354        <?php wp_nonce_field(“插件上传”);?>
    355355<label class=“screen-reader-text”for=“pluginzip”><?php_e(“插件zip文件”);?></标签>
    356 <input type=“file”id=“pluginzip”name=“plugingzip”/>
     356<input type=“file”id=“pluginzip”name=“plugingzip”accept=“.zip”/>
    357357        <?php submit_button(__(“立即安装”),“”,“Install-plugin-submit”,false);?>
    358358</form>
  • trunk/src/wp-admin/includes/theme-install.php

    45583兰特 48390兰特  
    184184    <?php wp_nonce_field(“主题上传”);?>
    185185<label class=“screen-reader-text”for=“themezip”><?php_e('主题zip文件');?></标签>
    186 <input type=“file”id=“themezip”name=“themezip”/>
     186<input type=“file”id=“themezip”name=“themezip”accept=“.zip”/>
    187187    <?php submit_button(__(“立即安装”),“”,“安装主题提交”,false);?>
    188188</form>
  • trunk/src/wp-admin/update.php

    47808兰特 48390兰特  
    158158
    159159/*转换器:%s:文件名*/
    160 $title=sprintf(__('安装P(P)lugin来自上传文件:%s'),esc_html(basename($file_upload->filename));
     160$title=sprintf(__('安装第页lugin来自上传文件:%s'),esc_html(basename($file_upload->filename));
    161161$nonce='插件上传';
    162162$url=add_query_arg(数组(“package”=>$file_upload->id),“update.php?”?action=上传插件);
    163163$type=“上传”;//安装插件类型,从Web或上传。
    164164
    165 $upgrader=new Plugin_upgrader(new Plugin_Installer_Skin(compact('type','title','nonce','url'));
    166 $result=$upgrader->install($file_upload->package);
     165$overwrite=isset($_GET['overwrite'])?sanitize_text_field($_GET['overwrite']):'';
     166$overwrite=in_array($overwhite,array('update-plugin','downgrade-plugin]),true)$覆盖:“”;
     167
     168$upgrader=新Plugin_upgrader(新Plugin_Installer_Skin(compact('type','title','nonce','url','overwrite'));
     169$result=$upgrader->install($file_upload->package,array('overwrite_package'=>$overwrite));
    167170
    168171if($result|iswp_error($resort)){
     
    278281
    279282/*转换器:%s:文件名*/
    280 $title=sprintf(__('安装T型上传文件的heme:%s'),esc_html(basename($file_upload->filename));
     283$title=sprintf(__('安装t吨上传文件的heme:%s'),esc_html(basename($file_upload->filename));
    281284$nonce='theme-upload';
    282285$url=add_query_arg(数组(“package”=>$file_upload->id),“update.php?”?action=上传主题);
    283286$type=“上传”;//安装主题类型,从Web或上载。
    284287
    285 $upgrader=new Theme_upgrader(新Theme_Installer_Skin(compact('type','title','nonce','url'));
    286 $result=$upgrader->install($file_upload->package);
     288$overwrite=isset($_GET['overwrite'])?sanitize_text_field($_GET['overwrite']):'';
     289$overwrite=in_array($overwhite,array('update-theme','download-theme]),true)$覆盖:“”;
     290
     291$upgrader=new Theme_upgrader(新Theme_Installer_Skin(compact('type','title','nonce','url','overwrite'));
     292$result=$upgrader->install($file_upload->package,array('overwrite_package'=>$overwrite));
    287293
    288294if($result|iswp_error($resort)){
注:请参见TracChangeset(跟踪变更集)获取有关使用变更集查看器的帮助。