From 126c2076a763c2a4fae98d241f02857db1323420 Mon Sep 17 00:00:00 2001 From: liaoxin Date: Tue, 19 May 2026 00:38:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E8=81=86=E9=9F=B5?= =?UTF-8?q?=EF=BC=88music=EF=BC=89=E5=88=86=E7=B1=BB=E2=80=94=E2=80=94?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E9=A1=B5+=E5=8D=95=E9=A1=B5+CSS+=E5=AF=BC?= =?UTF-8?q?=E8=88=AA+Customizer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- functions.php | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ page-music.php | 47 +++++++++++++++++++++++++++++++++++++++++++++ single-music.php | 43 +++++++++++++++++++++++++++++++++++++++++ style.css | 27 +++++++++++++++++++++++++- 4 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 page-music.php create mode 100644 single-music.php diff --git a/functions.php b/functions.php index d23fe81..0611074 100644 --- a/functions.php +++ b/functions.php @@ -254,6 +254,14 @@ function kjweji_setup_pages() { 'meta_input' => ['_wp_page_template' => 'page-photos.php'], ]); } + // 创建聆韵页 + if (!get_page_by_path('music')) { + wp_insert_post([ + 'post_title' => '聆韵', 'post_name' => 'music', + 'post_type' => 'page', 'post_status' => 'publish', + 'meta_input' => ['_wp_page_template' => 'page-music.php'], + ]); + } // 创建导航菜单 if (!wp_get_nav_menu_object('主导航')) { $menu_id = wp_create_nav_menu('主导航'); @@ -262,6 +270,7 @@ function kjweji_setup_pages() { ['笺文', '/articles/'], ['微言', '/tucao/'], ['拾影', '/photos/'], + ['聆韵', '/music/'], ] as $item) { wp_update_nav_menu_item($menu_id, 0, [ 'menu-item-title' => $item[0], @@ -319,6 +328,39 @@ add_filter('post_type_link', function($link, $post) { // 匹配 /photo/123/slug/ 格式 add_action('init', function() { add_rewrite_rule('^photo/([0-9]+)/([^/]+)/?$', 'index.php?post_type=photo&p=$matches[1]', 'top'); + +// ── 自定义文章类型: music(聆韵) ────────── +add_action('init', 'kjweji_register_music'); +function kjweji_register_music() { + register_post_type('music', array( + 'labels' => array( + 'name' => '聆韵', + 'singular_name' => '聆韵', + 'add_new' => '发聆韵', + 'add_new_item' => '发新聆韵', + 'edit_item' => '编辑聆韵', + ), + 'public' => true, + 'has_archive' => false, + 'rewrite' => array('slug' => 'music/%post_id%'), + 'show_in_rest' => true, + 'supports' => array('title', 'editor', 'author', 'thumbnail'), + 'menu_position' => 27, + 'menu_icon' => 'dashicons-format-audio', + )); +} + +add_filter('post_type_link', function($link, $post) { + if ($post->post_type === 'music' && $post->post_status === 'publish') { + return home_url(user_trailingslashit('/music/' . $post->ID . '/' . $post->post_name)); + } + return $link; +}, 11, 2); + +add_action('init', function() { + add_rewrite_rule('^music/([0-9]+)/([^/]+)/?$', 'index.php?post_type=music&p=$matches[1]', 'top'); +}); + add_rewrite_rule('^photo/([0-9]+)/?$', 'index.php?post_type=photo&p=$matches[1]', 'top'); }); @@ -445,6 +487,14 @@ function kjweji_customize_register($wp_customize) { )); $wp_customize->add_control('kjweji_photos_subtitle', array( 'label' => '拾影页副标题', + )); + + $wp_customize->add_setting('kjweji_music_subtitle', array( + 'default' => '音符落下,余韵未散', + 'sanitize_callback' => 'sanitize_text_field', + )); + $wp_customize->add_control('kjweji_music_subtitle', array( + 'label' => '聆韵页副标题', 'section' => 'kjweji_settings', 'type' => 'text', )); diff --git a/page-music.php b/page-music.php new file mode 100644 index 0000000..171156e --- /dev/null +++ b/page-music.php @@ -0,0 +1,47 @@ + 'music', + 'posts_per_page' => -1, +)); +?> + +
+ 🎵 聆韵 + +
+ +have_posts()) : ?> +
+ have_posts()) : $query->the_post(); ?> + + +
+ get_the_title())); ?> + +
+ +
+ 🎵 +
+ +
+ + · +
+
+ +
+ + +
+ 🎵 +

尚无韵律,静待佳音

+
+ + + diff --git a/single-music.php b/single-music.php new file mode 100644 index 0000000..27c1160 --- /dev/null +++ b/single-music.php @@ -0,0 +1,43 @@ + + + +
+ ← 返回聆韵 + + +
+ get_the_title())); ?> +
+ + +

+ +
+ + · + +
+ +
+ +
+ + +
+ + + + + + + + +
+ +
+ + + diff --git a/style.css b/style.css index 9e2a039..e785a40 100644 --- a/style.css +++ b/style.css @@ -1,6 +1,6 @@ /* Theme Name: 空笺未寄 -Version: 0.16.8 +Version: 0.17.0 Requires at least: 6.0 Requires PHP: 7.4 License: MIT @@ -304,6 +304,31 @@ echo "done" /* Gallery image fix */ .gallery-img { display:block !important; width:100% !important; height:auto !important; } .gallery-empty { display:flex; align-items:center; justify-content:center; min-height:160px; color:var(--ink-lighter); background:linear-gradient(135deg, #faf7f0 0%, #f0ebe0 100%); } +/* ── 聆韵 ── */ +.music-list { display:flex; flex-direction:column; gap:0; } +.music-item { display:flex; align-items:center; gap:16px; padding:18px 0; border-bottom:1px solid var(--border-light); text-decoration:none; color:inherit; transition:padding 0.25s; } +.music-item:hover { padding-left:8px; border-bottom-color:var(--cinnabar-light); } +.music-item__cover { width:60px; height:60px; border-radius:var(--radius); overflow:hidden; flex-shrink:0; position:relative; background:linear-gradient(135deg, #e8dccf 0%, #d5c4aa 100%); } +.music-item__cover img { width:100%; height:100%; object-fit:cover; } +.music-item__cover--empty { display:flex; align-items:center; justify-content:center; font-size:28px; } +.music-item__play { position:absolute; inset:0; display:flex; align-items:center; justify-content:center; background:rgba(0,0,0,0.3); color:#fff; font-size:20px; opacity:0; transition:opacity 0.2s; } +.music-item:hover .music-item__play { opacity:1; } +.music-item__body { display:flex; flex-direction:column; gap:4px; } +.music-item__title { font-size:16px; letter-spacing:0.05em; } +.music-item__author { font-size:12px; color:var(--ink-lighter); } +.music-empty { display:flex; flex-direction:column; align-items:center; justify-content:center; min-height:160px; color:var(--ink-lighter); gap:12px; } +.music-empty__icon { font-size:48px; opacity:0.4; } +.music-detail { max-width:680px; margin:0 auto; } +.music-detail__cover { border-radius:var(--radius); overflow:hidden; margin-bottom:24px; } +.music-detail__cover img { width:100%; height:auto; display:block; } +.music-detail__title { font-size:24px; margin-bottom:12px; } +.music-detail__meta { display:flex; align-items:center; gap:8px; font-size:13px; color:var(--ink-lighter); margin-bottom:24px; } +.music-detail__body { font-size:15px; line-height:1.9; color:var(--ink); margin-bottom:32px; } +.music-detail__body audio, .music-detail__body video { width:100%; margin:16px 0; border-radius:var(--radius); } +.music-detail__nav { display:flex; justify-content:space-between; padding:24px 0; border-top:1px solid var(--border-light); } +.music-detail__nav a { color:var(--ink-light); text-decoration:none; font-size:14px; } +.music-detail__nav a:hover { color:var(--cinnabar); } + /* Card & pinned cover image constraints */ .card-cover img, .pinned-cover img, .article-cover img, .gallery-img {