WordPress学习——add_theme_support()详解
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 文件中,具体代码如下:
function add_theme_support( $feature ) {
global $_wp_theme_features;
if ( func_num_args() == 1 )$args = true;
else$args = array_slice( func_get_args(), 1 );
switch ( $feature ) {
case 'post-thumbnails':// All post types are already supported.if ( true === get_theme_support( 'post-thumbnails' ) ) {
return;
}
/** Merge post types with any that already declared their support* for post thumbnails.*/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;
case 'post-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;
case 'html5' :// You can't just pass 'html5', you need to pass an array of types.if ( empty( $args[0] ) ) {
// Build an array of types for back-compat.$args = array( 0 =>
array( 'comment-list', 'comment-form', 'search-form' ) );
}
elseif ( ! is_array( $args[0] ) ) {
_doing_it_wrong( "add_theme_support( 'html5' )", __( 'You need to pass an array of types.' ), '3.6.1' );
return false;
}
// Calling 'html5' again merges, rather than overwrites.if ( isset( $_wp_theme_features['html5'] ) )$args[0] = array_merge( $_wp_theme_features['html5'][0], $args[0] );
break;
case 'custom-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 );
// Allow full flexibility if no size is specified.if ( is_null( $args[0]['width'] ) &
&
is_null( $args[0]['height'] ) ) {
$args[0]['flex-width'] = true;
$args[0]['flex-height'] = true;
}
break;
case 'custom-header-uploads' :return add_theme_support( 'custom-header', array( 'uploads' =>
true ) );
case 'custom-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'] );
// Merge in data from previous add_theme_support() calls.// The first value registered wins. (A child theme is set up first.)if ( isset( $_wp_theme_features['custom-header'] ) )$args[0] = wp_parse_args( $_wp_theme_features['custom-header'][0], $args[0] );
// Load in the defaults at the end, as we need to insure first one wins.// This will cause all constants to be defined, as each arg will then be set to the default.if ( $jit )$args[0] = wp_parse_args( $args[0], $defaults );
// If a constant was defined, use that value. Otherwise, define the constant to ensure// the constant is always accurate (and is not defined later, overriding our value).// As stated above, the first value wins.// Once we get to wp_loaded (just-in-time), define any constants we haven't already.// Constants are lame. Don't reference them. This is just for backward compatibility. 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;
// If headers are supported, and we still don't have a defined width or height,// we have implicit flex sizes.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;
case 'custom-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'] );
// Merge in data from previous add_theme_support() calls. The first value registered wins.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;
// Ensure that 'title-tag' is accessible in the admin.case 'title-tag' :// Can be called in functions.php but must happen before wp_loaded, i.e. not in header.php.if ( did_action( 'wp_loaded' ) ) {
/* translators: 1: Theme support 2: hook name */_doing_it_wrong( "add_theme_support( 'title-tag' )", sprintf( __( 'Theme support for %1$s should be registered before the %2$s hook.' ),'code>
title-tag/code>
', 'code>
wp_loaded/code>
' ), '4.1.0' );
return false;
}
}
$_wp_theme_features[ $feature ] = $args;
}
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: WordPress学习——add_theme_support()详解
本文地址: https://pptw.com/jishu/40291.html
