WordPress功能函数add_theme_support()

WordPress功能函数add_theme_support()

290
2021-03-26 16:04:38

WordPress功能函数add_theme_support(),为给定的特性注册主题支持。

用法:

add_theme_support( string $feature, mixed $args )

描述

必须在主题的functions.php文件中调用才能工作。如果附加到一个钩子上,它必须是' after_setup_theme '。init钩子对于某些特性来说可能太晚了。

使用示例:

add_theme_support( 'title-tag' );

add_theme_support( 'custom-logo', array(

'height' => 480,

'width' => 720,

) );

参数:

$feature

(string) (必需)要添加的特性。可能的核心价值包括:

'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'

'wp-block-styles'

'widgets'

$args

(mixed) (可选) 与某些特性一起传递的额外参数。

返回

(void|false)成功时无效,失败时false。

更多信息

功能

帖子格式

这个特性支持主题的Post格式。使用子主题时,请注意

add_theme_support(“post-formats”)

将覆盖父主题定义的格式,而不是添加到它。

要启用特定的格式(参见Post格式支持的格式),请使用:

add_theme_support( 'post-formats', array( 'aside', 'gallery' ) );

使用has_post_format()来检查是否有一个' quote '格式分配给文章:

// In your theme single.php, page.php or custom post type

if ( has_post_format( 'quote' ) ) {

echo 'This is a quote.';

}

发布缩略图

这个特性使Post缩略图对主题的支持成为可能。注意,您可以选择传递第二个参数$args,它带有一个Post类型的数组,您希望为其启用该特性。

add_theme_support( 'post-thumbnails' );

add_theme_support( 'post-thumbnails', array( 'post' ) ); // Posts only

add_theme_support( 'post-thumbnails', array( 'page' ) ); // Pages only

add_theme_support( 'post-thumbnails', array( 'post', 'movie' ) ); // Posts and Movies

这个特性必须在' init '钩子被触发之前被调用。这意味着它需要被直接放置在functions.php中或附加在' after_setup_theme '钩子中的函数中。对于自定义文章类型,还可以使用register_post_type()函数添加文章缩略图。

要在themes .php或single.php或自定义模板中显示缩略图,请使用:

the_post_thumbnail();

要在显示之前检查是否有一个post缩略图分配给该post,使用:

if ( has_post_thumbnail() ) {

the_post_thumbnail();

}

自定义背景

这个特性启用了对主题的custom_background支持。

add_theme_support( 'custom-background' );

注意,你可以使用以下方式添加默认参数:

$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' => '',

'wp-head-callback' => '_custom_background_cb',

'admin-head-callback' => '',

'admin-preview-callback' => '',

);

add_theme_support( 'custom-background', $defaults );

自定义Header

这个特性启用了对主题的Custom_Headers支持。

add_theme_support( 'custom-header' );

注意,你可以使用以下方式添加默认参数:

$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',

);

add_theme_support( 'custom-header', $defaults );

自定义Logo

这个特性是在Version_4.5中首次引入的,它支持主题的Theme_Logo。

add_theme_support( 'custom-logo' );

注意,你可以使用以下方式添加默认参数:

add_theme_support( 'custom-logo', array(

'height' => 100,

'width' => 400,

'flex-height' => true,

'flex-width' => true,

'header-text' => array( 'site-title', 'site-description' ),

) );

Feed Links

这个功能可以在头部自动提供帖子和评论的链接。这应该用来代替已弃用的automatic_feed_links()函数。

add_theme_support( 'automatic-feed-links' );

HTML5

这个特性允许对搜索表单、评论表单、评论列表、图片库和标题使用HTML5标记。

add_theme_support( 'html5', array( 'comment-list', 'comment-form', 'search-form', 'gallery', 'caption', 'style', 'script' ) );

标题标签

这个特性使插件和主题能够管理文档标题标签。这应该用来代替wp_title()函数。

add_theme_support( 'title-tag' );

定制选择性刷新小部件

该特性支持对定制器中管理的小部件进行选择性刷新。这个功能在WordPress 4.5中就可以使用了。有关选择性刷新的原因和方式的更多信息,请阅读对小部件实现选择性刷新支持。

add_theme_support( 'customize-selective-refresh-widgets' );

多点

要在多站点安装中显示“特色图片”元框,请确保您更新了允许上传的文件类型,在网络管理,网络管理设置子面板#Upload_Settings,媒体上传按钮选项。默认为jpg jpeg png gif mp3 mov avi wmv midi mid pdf。

其他笔记

下面的参数是只读的,只能在current_theme_supports()的上下文中使用:

使用register_sidebar()或register_sidebars()代替。

菜单:使用register_nav_menu()或register_nav_menus()代替。

编辑器风格:使用add_editor_style()代替。

来源:

文件: wp-includes/theme.php

function add_theme_support( $feature, ...$args ) {

global $_wp_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( $_wp_theme_features['post-thumbnails'] ) ) {

$args[0] = array_unique( array_merge( $_wp_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( $_wp_theme_features['html5'] ) ) {

$args[0] = array_merge( $_wp_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] = 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 ( 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,

'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 ( 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' => '',

'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' ) ) {

_doing_it_wrong(

"add_theme_support( 'title-tag' )",

sprintf(

/* translators: 1: title-tag, 2: wp_loaded */

__( '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;

}

喜欢这个文章就点个赞分享给好友吧~

END

发表评论

一次支付终身使用
免费版本更新
靠谱的技术支持
成为会员