《WordPress学习——add_theme_support()详解》正文开始,本次阅读大概7分钟。
WordPress 默认隐藏了很多功能,我们可以通过 add_theme_support() 函数启用它们。该函数必须在主题的 functions.php 文件中调用,如果想通过钩子函数加载的话则必须使用 after_setup_theme 这个钩子,因为 init 对于一些功能来说,已经太迟了。该函数语法如下:
add_theme_support( string $feature )
$feature:字符串(必填)。将要添加的功能名称。
$args,…:混合(可选)。额外参数用以指定具体功能。
目前支持的功能参数主要有:
post-thumbnails:特色图片。
post-formats:文章形式。
html5:HTML5支持。
custom-logo:自定义网站Logo图标。
custom-header-uploads:顶部图像上传。
custom-header:自定义网站顶部内容。
custom-background:自定义网站背景内容。
title-tag:自动生成页面标题信息,需调用?php wp_head();?。
customize-selective-refresh-widgets:小部件选择性更新。
starter-content:内容初始化。
responsive-embeds:自适应嵌入内容。
align-wide:配置块编辑器宽对齐。
dark-editor-style:配置暗风格块编辑器。
disable-custom-colors:禁用快编辑器自定义颜色。
disable-custom-font-sizes:禁用快编辑器自定义字体大小。
editor-color-pallete:配置块编辑器调色板。
editor-font-sizes:配置块编辑器字体大小。
editor-styles:配置块编辑器样式。
wp-block-styles:启用默认块编辑器样式。
该函数定义在 wp-includes/theme.php 文件中,具体代码如下:
functionadd_theme_support($feature){ global$_wp_theme_features; if(func_num_args()==1) $args=true; else $args=array_slice(func_get_args(),1); switch($feature){ casepost-thumbnails: //Allposttypesarealreadysupported. if(true===get_theme_support(post-thumbnails)){ return; } /* *Mergeposttypeswithanythatalreadydeclaredtheirsupport *forpostthumbnails. */ if(is_array($args[0])isset($_wp_theme_features[post-thumbnails])){ $args[0]=array_unique(array_merge($_wp_theme_features[post-thumbnails][0],$args[0])); } break; casepost-formats: if(is_array($args[0])){ $post_formats=get_post_format_slugs(); unset($post_formats[standard]); $args[0]=array_intersect($args[0],array_keys($post_formats)); } break; casehtml5: //Youcantjustpasshtml5,youneedtopassanarrayoftypes. if(empty($args[0])){ //Buildanarrayoftypesforback-compat. $args=array(0=array(comment-list,comment-form,search-form)); }elseif(!is_array($args[0])){ _doing_it_wrong(add_theme_support(html5),__(Youneedtopassanarrayoftypes.),3.6.1); returnfalse; } //Callinghtml5againmerges,ratherthanoverwrites. if(isset($_wp_theme_features[html5])) $args[0]=array_merge($_wp_theme_features[html5][0],$args[0]); break; casecustom-logo: if(!is_array($args)){ $args=array(0=array()); } $defaults=array( width=null, height=null, flex-width=false, flex-height=false, header-text=, ); $args[0]=wp_parse_args(array_intersect_key($args[0],$defaults),$defaults); //Allowfullflexibilityifnosizeisspecified. if(is_null($args[0][width])is_null($args[0][height])){ $args[0][flex-width]=true; $args[0][flex-height]=true; } break; casecustom-header-uploads: returnadd_theme_support(custom-header,array(uploads=true)); casecustom-header: if(!is_array($args)) $args=array(0=array()); $defaults=array( default-image=, random-default=false, width=0, height=0, flex-height=false, flex-width=false, default-text-color=, header-text=true, uploads=true, wp-head-callback=, admin-head-callback=, admin-preview-callback=, video=false, video-active-callback=is_front_page, ); $jit=isset($args[0][__jit]); unset($args[0][__jit]); //Mergeindatafrompreviousadd_theme_support()calls. //Thefirstvalueregisteredwins.(Achildthemeissetupfirst.) if(isset($_wp_theme_features[custom-header])) $args[0]=wp_parse_args($_wp_theme_features[custom-header][0],$args[0]); //Loadinthedefaultsattheend,asweneedtoinsurefirstonewins. //Thiswillcauseallconstantstobedefined,aseachargwillthenbesettothedefault. if($jit) $args[0]=wp_parse_args($args[0],$defaults); //Ifaconstantwasdefined,usethatvalue.Otherwise,definetheconstanttoensure //theconstantisalwaysaccurate(andisnotdefinedlater,overridingourvalue). //Asstatedabove,thefirstvaluewins. //Oncewegettowp_loaded(just-in-time),defineanyconstantswehaventalready. //Constantsarelame.Dontreferencethem.Thisisjustforbackwardcompatibility. if(defined(NO_HEADER_TEXT)) $args[0][header-text]=!NO_HEADER_TEXT; elseif(isset($args[0][header-text])) define(NO_HEADER_TEXT,empty($args[0][header-text])); if(defined(HEADER_IMAGE_WIDTH)) $args[0][width]=(int)HEADER_IMAGE_WIDTH; elseif(isset($args[0][width])) define(HEADER_IMAGE_WIDTH,(int)$args[0][width]); if(defined(HEADER_IMAGE_HEIGHT)) $args[0][height]=(int)HEADER_IMAGE_HEIGHT; elseif(isset($args[0][height])) define(HEADER_IMAGE_HEIGHT,(int)$args[0][height]); if(defined(HEADER_TEXTCOLOR)) $args[0][default-text-color]=HEADER_TEXTCOLOR; elseif(isset($args[0][default-text-color])) define(HEADER_TEXTCOLOR,$args[0][default-text-color]); if(defined(HEADER_IMAGE)) $args[0][default-image]=HEADER_IMAGE; elseif(isset($args[0][default-image])) define(HEADER_IMAGE,$args[0][default-image]); if($jit!empty($args[0][default-image])) $args[0][random-default]=false; //Ifheadersaresupported,andwestilldonthaveadefinedwidthorheight, //wehaveimplicitflexsizes. if($jit){ if(empty($args[0][width])empty($args[0][flex-width])) $args[0][flex-width]=true; if(empty($args[0][height])empty($args[0][flex-height])) $args[0][flex-height]=true; } break; casecustom-background: if(!is_array($args)) $args=array(0=array()); $defaults=array( default-image=, default-preset=default, default-position-x=left, default-position-y=top, default-size=auto, default-repeat=repeat, default-attachment=scroll, default-color=, wp-head-callback=_custom_background_cb, admin-head-callback=, admin-preview-callback=, ); $jit=isset($args[0][__jit]); unset($args[0][__jit]); //Mergeindatafrompreviousadd_theme_support()calls.Thefirstvalueregisteredwins. if(isset($_wp_theme_features[custom-background])) $args[0]=wp_parse_args($_wp_theme_features[custom-background][0],$args[0]); if($jit) $args[0]=wp_parse_args($args[0],$defaults); if(defined(BACKGROUND_COLOR)) $args[0][default-color]=BACKGROUND_COLOR; elseif(isset($args[0][default-color])||$jit) define(BACKGROUND_COLOR,$args[0][default-color]); if(defined(BACKGROUND_IMAGE)) $args[0][default-image]=BACKGROUND_IMAGE; elseif(isset($args[0][default-image])||$jit) define(BACKGROUND_IMAGE,$args[0][default-image]); break; //Ensurethattitle-tagisaccessibleintheadmin. casetitle-tag: //Canbecalledinfunctions.phpbutmusthappenbeforewp_loaded,i.e.notinheader.php. if(did_action(wp_loaded)){ /*translators:1:Themesupport2:hookname*/ _doing_it_wrong(add_theme_support(title-tag),sprintf(__(Themesupportfor%1$sshouldberegisteredbeforethe%2$shook.), codetitle-tag/code,codewp_loaded/code),4.1.0); returnfalse; } } $_wp_theme_features[$feature]=$args; }