246 lines
8.1 KiB
PHP
246 lines
8.1 KiB
PHP
<?php
|
||
/**
|
||
* CyyWordpress functions and definitions
|
||
*
|
||
* @link https://developer.wordpress.org/themes/basics/theme-functions/
|
||
*
|
||
* @package CyyWordpress
|
||
*/
|
||
|
||
// ---------------------------------------------------------------------------
|
||
// PHP & WordPress version guards
|
||
// ---------------------------------------------------------------------------
|
||
if ( version_compare( PHP_VERSION, '8.1', '<' ) ) {
|
||
add_action(
|
||
'admin_notices',
|
||
function (): void {
|
||
echo '<div class="notice notice-error"><p>'
|
||
. esc_html__( 'CyyWordpress 主题需要 PHP 8.1 或更高版本。', 'cyywordpress' )
|
||
. '</p></div>';
|
||
}
|
||
);
|
||
return; // Do not load theme in unsupported environments.
|
||
}
|
||
|
||
global $wp_version;
|
||
if ( version_compare( $wp_version, '6.0', '<' ) ) {
|
||
add_action(
|
||
'admin_notices',
|
||
function (): void {
|
||
echo '<div class="notice notice-error"><p>'
|
||
. esc_html__( 'CyyWordpress 主题需要 WordPress 6.0 或更高版本。', 'cyywordpress' )
|
||
. '</p></div>';
|
||
}
|
||
);
|
||
return;
|
||
}
|
||
|
||
// ---------------------------------------------------------------------------
|
||
// Version constant
|
||
// ---------------------------------------------------------------------------
|
||
if ( ! defined( '_S_VERSION' ) ) {
|
||
define( '_S_VERSION', '2.0.0' );
|
||
}
|
||
|
||
// ---------------------------------------------------------------------------
|
||
// Includes – each file owns its own domain
|
||
// ---------------------------------------------------------------------------
|
||
require get_template_directory() . '/inc/custom-header.php';
|
||
require get_template_directory() . '/inc/template-tags.php';
|
||
require get_template_directory() . '/inc/template-functions.php';
|
||
require get_template_directory() . '/inc/customizer.php';
|
||
require get_template_directory() . '/inc/bulmapress_navwalker.php';
|
||
require get_template_directory() . '/inc/search.php';
|
||
require get_template_directory() . '/inc/pagination.php';
|
||
require get_template_directory() . '/inc/block-patterns.php';
|
||
require get_template_directory() . '/inc/class-cyywordpress-assets.php';
|
||
require get_template_directory() . '/inc/class-cyywordpress-seo.php';
|
||
require get_template_directory() . '/inc/class-cyywordpress-schema.php';
|
||
|
||
if ( defined( 'JETPACK__VERSION' ) ) {
|
||
require get_template_directory() . '/inc/jetpack.php';
|
||
}
|
||
|
||
// ---------------------------------------------------------------------------
|
||
// Theme setup
|
||
// ---------------------------------------------------------------------------
|
||
if ( ! function_exists( 'cyywordpress_setup' ) ) :
|
||
/**
|
||
* Sets up theme defaults and registers WordPress feature support.
|
||
*/
|
||
function cyywordpress_setup(): void {
|
||
load_theme_textdomain( 'cyywordpress', get_template_directory() . '/languages' );
|
||
|
||
add_theme_support( 'automatic-feed-links' );
|
||
add_theme_support( 'title-tag' );
|
||
add_theme_support( 'post-thumbnails' );
|
||
add_theme_support( 'responsive-embeds' );
|
||
add_theme_support( 'align-wide' );
|
||
add_theme_support( 'widgets-block-editor' );
|
||
|
||
// Editor styles – keeps back-end visually consistent with the front end.
|
||
add_theme_support( 'editor-styles' );
|
||
add_editor_style( 'assets/css/editor-style.css' );
|
||
|
||
add_theme_support(
|
||
'html5',
|
||
array(
|
||
'search-form',
|
||
'comment-form',
|
||
'comment-list',
|
||
'gallery',
|
||
'caption',
|
||
'style',
|
||
'script',
|
||
)
|
||
);
|
||
|
||
add_theme_support(
|
||
'custom-background',
|
||
apply_filters(
|
||
'cyywordpress_custom_background_args',
|
||
array(
|
||
'default-color' => 'ffffff',
|
||
'default-image' => '',
|
||
)
|
||
)
|
||
);
|
||
|
||
add_theme_support( 'customize-selective-refresh-widgets' );
|
||
|
||
add_theme_support(
|
||
'custom-logo',
|
||
array(
|
||
'height' => 80,
|
||
'width' => 80,
|
||
'flex-width' => true,
|
||
'flex-height' => true,
|
||
)
|
||
);
|
||
|
||
// Navigation menus.
|
||
register_nav_menus(
|
||
array(
|
||
'menu-1' => esc_html__( '主导航', 'cyywordpress' ),
|
||
'menu-2' => esc_html__( '页脚导航', 'cyywordpress' ),
|
||
'social' => esc_html__( '社交媒体链接', 'cyywordpress' ),
|
||
)
|
||
);
|
||
|
||
// Custom image sizes.
|
||
add_image_size( 'card-thumbnail', 800, 450, true );
|
||
add_image_size( 'card-thumbnail-sm', 400, 225, true );
|
||
}
|
||
endif;
|
||
add_action( 'after_setup_theme', 'cyywordpress_setup' );
|
||
|
||
// ---------------------------------------------------------------------------
|
||
// Content width
|
||
// ---------------------------------------------------------------------------
|
||
function cyywordpress_content_width(): void {
|
||
$GLOBALS['content_width'] = apply_filters( 'cyywordpress_content_width', 760 );
|
||
}
|
||
add_action( 'after_setup_theme', 'cyywordpress_content_width', 0 );
|
||
|
||
// ---------------------------------------------------------------------------
|
||
// Widget areas
|
||
// ---------------------------------------------------------------------------
|
||
function cyywordpress_widgets_init(): void {
|
||
register_sidebar(
|
||
array(
|
||
'name' => esc_html__( '文章侧边栏', 'cyywordpress' ),
|
||
'id' => 'sidebar-1',
|
||
'description' => esc_html__( '出现在文章/页面侧边的 Widget 区域。', 'cyywordpress' ),
|
||
'before_widget' => '<div id="%1$s" class="widget card %2$s" style="margin-bottom:1rem;">',
|
||
'after_widget' => '</div>',
|
||
'before_title' => '<div class="card-header"><p class="card-header-title">',
|
||
'after_title' => '</p></div><div class="card-content">',
|
||
)
|
||
);
|
||
|
||
register_sidebar(
|
||
array(
|
||
'name' => esc_html__( '页脚 Widget 1', 'cyywordpress' ),
|
||
'id' => 'sidebar-footer-1',
|
||
'description' => esc_html__( '页脚第一列 Widget 区域。', 'cyywordpress' ),
|
||
'before_widget' => '<div id="%1$s" class="widget %2$s">',
|
||
'after_widget' => '</div>',
|
||
'before_title' => '<h3 class="footer-widget-title">',
|
||
'after_title' => '</h3>',
|
||
)
|
||
);
|
||
|
||
register_sidebar(
|
||
array(
|
||
'name' => esc_html__( '页脚 Widget 2', 'cyywordpress' ),
|
||
'id' => 'sidebar-footer-2',
|
||
'description' => esc_html__( '页脚第二列 Widget 区域。', 'cyywordpress' ),
|
||
'before_widget' => '<div id="%1$s" class="widget %2$s">',
|
||
'after_widget' => '</div>',
|
||
'before_title' => '<h3 class="footer-widget-title">',
|
||
'after_title' => '</h3>',
|
||
)
|
||
);
|
||
|
||
register_sidebar(
|
||
array(
|
||
'name' => esc_html__( '页脚 Widget 3', 'cyywordpress' ),
|
||
'id' => 'sidebar-footer-3',
|
||
'description' => esc_html__( '页脚第三列 Widget 区域。', 'cyywordpress' ),
|
||
'before_widget' => '<div id="%1$s" class="widget %2$s">',
|
||
'after_widget' => '</div>',
|
||
'before_title' => '<h3 class="footer-widget-title">',
|
||
'after_title' => '</h3>',
|
||
)
|
||
);
|
||
|
||
register_sidebar(
|
||
array(
|
||
'name' => esc_html__( '导航栏右侧', 'cyywordpress' ),
|
||
'id' => 'sidebar-header',
|
||
'description' => esc_html__( '出现在导航栏右侧的 Widget 区域(搜索等)。', 'cyywordpress' ),
|
||
'before_widget' => '<div id="%1$s" class="widget navbar-item %2$s">',
|
||
'after_widget' => '</div>',
|
||
'before_title' => '<span class="screen-reader-text">',
|
||
'after_title' => '</span>',
|
||
)
|
||
);
|
||
}
|
||
add_action( 'widgets_init', 'cyywordpress_widgets_init' );
|
||
|
||
// ---------------------------------------------------------------------------
|
||
// Initialise asset, SEO and schema classes
|
||
// ---------------------------------------------------------------------------
|
||
add_action(
|
||
'after_setup_theme',
|
||
function (): void {
|
||
CyyWordpress_Assets::init();
|
||
CyyWordpress_SEO::init();
|
||
CyyWordpress_Schema::init();
|
||
}
|
||
);
|
||
|
||
// ---------------------------------------------------------------------------
|
||
// Lazy-load attributes on all attachment images
|
||
// ---------------------------------------------------------------------------
|
||
add_filter(
|
||
'wp_get_attachment_image_attributes',
|
||
function ( array $attr ): array {
|
||
$attr['loading'] = 'lazy';
|
||
$attr['decoding'] = 'async';
|
||
return $attr;
|
||
}
|
||
);
|
||
|
||
// ---------------------------------------------------------------------------
|
||
// Remove WordPress emoji CDN (performance)
|
||
// ---------------------------------------------------------------------------
|
||
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
|
||
remove_action( 'wp_print_styles', 'print_emoji_styles' );
|
||
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
|
||
remove_action( 'admin_print_styles', 'print_emoji_styles' );
|
||
|
||
|
||
|
||
|