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()) : ?>
+
+
+
+
+
+
+
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 {