凉风有信,秋月无边。
亏我思娇的情绪好比度日如年。

WordPress学习——add_theme_support()详解

《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;
}

赞(185)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的内容,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。本博客资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。如果本文导致的版权问题以及内容纠错问题请联系站长QQ:1004619 | 点此给我发送邮件
本文标题:WordPress学习——add_theme_support()详解
本文地址:https://www.1004619.com/nn/wordpressxxaddthemesupportxj.html