add_theme_support()
最后更新于:2021-11-25 19:42:58
add_theme_support( string$feature, mixed$args)Registers theme support for a given feature.
参数
- $feature
-
(string) (Required) The feature being added. Likely core values include:
- ‘admin-bar’
- ‘align-wide’
- ‘automatic-feed-links’
- ‘core-block-patterns’
- ‘custom-background’
- ‘custom-header’
- ‘custom-line-height’
- ‘custom-logo’
- ‘customize-selective-refresh-widgets’
- ‘custom-spacing’
- ‘custom-units’
- ‘dark-editor-style’
- ‘disable-custom-colors’
- ‘disable-custom-font-sizes’
- ‘editor-color-palette’
- ‘editor-gradient-presets’
- ‘editor-font-sizes’
- ‘editor-styles’
- ‘featured-content’
- ‘html5’
- ‘menus’
- ‘post-formats’
- ‘post-thumbnails’
- ‘responsive-embeds’
- ‘starter-content’
- ‘title-tag’
- ‘gc-block-styles’
- ‘widgets’
- ‘widgets-block-editor’
- $args
-
(mixed) (Optional) extra arguments to pass along with certain features.
响应
(void|false) Void on success, false on failure.
$defaults = array( 'default-image' => '', 'default-preset' => 'default', // 'default', 'fill', 'fit', 'repeat', 'custom' 'default-position-x' => 'left', // 'left', 'center', 'right' 'default-position-y' => 'top', // 'top', 'center', 'bottom' 'default-size' => 'auto', // 'auto', 'contain', 'cover' 'default-repeat' => 'repeat', // 'repeat-x', 'repeat-y', 'repeat', 'no-repeat' 'default-attachment' => 'scroll', // 'scroll', 'fixed' 'default-color' => '', 'gc-head-callback' => '_custom_background_cb', 'admin-head-callback' => '', 'admin-preview-callback' => '', ); add_theme_support( 'custom-background', $defaults );
$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, 'gc-head-callback' => '', 'admin-head-callback' => '', 'admin-preview-callback' => '', 'video' => false, 'video-active-callback' => 'is_front_page', ); add_theme_support( 'custom-header', $defaults );
源文件
文件: gc-includes/theme.php
function add_theme_support( $feature, ...$args ) {
global $_gc_theme_features;
if ( ! $args ) {
$args = true;
}
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 ( isset( $args[0] ) && is_array( $args[0] ) && isset( $_gc_theme_features['post-thumbnails'] ) ) {
$args[0] = array_unique( array_merge( $_gc_theme_features['post-thumbnails'][0], $args[0] ) );
}
break;
case 'post-formats':
if ( isset( $args[0] ) && is_array( $args[0] ) ) {
$post_formats = get_post_format_slugs();
unset( $post_formats['standard'] );
$args[0] = array_intersect( $args[0], array_keys( $post_formats ) );
} else {
_doing_it_wrong( "add_theme_support( 'post-formats' )", __( 'You need to pass an array of post formats.' ), '5.6.0' );
return false;
}
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 ( ! isset( $args[0] ) || ! 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( $_gc_theme_features['html5'] ) ) {
$args[0] = array_merge( $_gc_theme_features['html5'][0], $args[0] );
}
break;
case 'custom-logo':
if ( true === $args ) {
$args = array( 0 => array() );
}
$defaults = array(
'width' => null,
'height' => null,
'flex-width' => false,
'flex-height' => false,
'header-text' => '',
'unlink-homepage-logo' => false,
);
$args[0] = gc_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 ( true === $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,
'gc-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( $_gc_theme_features['custom-header'] ) ) {
$args[0] = gc_parse_args( $_gc_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] = gc_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 gc_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 ( true === $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' => '',
'gc-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( $_gc_theme_features['custom-background'] ) ) {
$args[0] = gc_parse_args( $_gc_theme_features['custom-background'][0], $args[0] );
}
if ( $jit ) {
$args[0] = gc_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 gc_loaded, i.e. not in header.php.
if ( did_action( 'gc_loaded' ) ) {
_doing_it_wrong(
"add_theme_support( 'title-tag' )",
sprintf(
/* translators: 1: title-tag, 2: gc_loaded */
__( 'Theme support for %1$s should be registered before the %2$s hook.' ),
'<code>title-tag</code>',
'<code>gc_loaded</code>'
),
'4.1.0'
);
return false;
}
}
$_gc_theme_features[ $feature ] = $args;
}
/** * Essential theme supports * */ function theme_setup(){ /** automatic feed link*/ add_theme_support( 'automatic-feed-links' ); /** tag-title **/ add_theme_support( 'title-tag' ); /** post formats */ $post_formats = array('aside','image','gallery','video','audio','link','quote','status'); add_theme_support( 'post-formats', $post_formats); /** post thumbnail **/ add_theme_support( 'post-thumbnails' ); /** HTML5 support **/ add_theme_support( 'html5', array( 'comment-list', 'comment-form', 'search-form', 'gallery', 'caption' ) ); /** refresh widgest **/ add_theme_support( 'customize-selective-refresh-widgets' ); /** custom background **/ $bg_defaults = array( 'default-image' => '', 'default-preset' => 'default', 'default-size' => 'cover', 'default-repeat' => 'no-repeat', 'default-attachment' => 'scroll', ); add_theme_support( 'custom-background', $bg_defaults ); /** custom header **/ $header_defaults = array( 'default-image' => '', 'width' => 300, 'height' => 60, 'flex-height' => true, 'flex-width' => true, 'default-text-color' => '', 'header-text' => true, 'uploads' => true, ); add_theme_support( 'custom-header', $header_defaults ); /** custom log **/ add_theme_support( 'custom-logo', array( 'height' => 60, 'width' => 400, 'flex-height' => true, 'flex-width' => true, 'header-text' => array( 'site-title', 'site-description' ), ) ); } add_action('after_setup_theme','theme_setup');
add_theme_support( 'starter-content', array( // Place widgets in the desired locations (such as sidebar or footer). // Example widgets: archives, calendar, categories, meta, recent-comments, recent-posts, // search, text_business_info, text_about 'widgets' => array( 'sidebar-1' => array( 'search', 'categories', 'meta'), ), // Specify pages to create, and optionally add custom thumbnails to them. // Note: For thumbnails, use attachment symbolic references in {{double-curly-braces}}. // Post options: post_type, post_title, post_excerpt, post_name (slug), post_content, // menu_order, comment_status, thumbnail (featured image ID), and template 'posts' => array( 'home', 'about', 'blog' => array( 'thumbnail' => '{{image-cafe}}' ), ), // Create custom image attachments used as post thumbnails for pages. // Note: You can reference these attachment IDs in the posts section above. Example: {{image-cafe}} 'attachments' => array( 'image-cafe' => array( 'post_title' => 'Cafe', 'file' => 'assets/images/cafe.jpg' ), ), // Assign options defaults, such as front page settings. // The 'show_on_front' value can be 'page' to show a specified page, or 'posts' to show your latest posts. // Note: Use page ID symbolic references from the posts section above wrapped in {{double-curly-braces}}. 'options' => array( 'show_on_front' => 'page', 'page_on_front' => '{{home}}', 'page_for_posts' => '{{blog}}', ), // Set the theme mods. 'theme_mods' => array( 'panel_1' => '{{about}}' ), // Set up nav menus. 'nav_menus' => array( 'top' => array( 'name' => 'Top Menu', 'items' => array( 'link_home', 'page_about', 'page_blog' )), ), ) );