Sndow CMS 主题开发 Skill 介绍

Sndow CMS 主题开发 Skill:让主题开发更规范、更高效

在使用 Sndow CMS 开发主题时,如果直接按照 WordPress 或其他 CMS 的经验编写代码,很容易遇到模板函数不存在、生命周期函数冲突、主题设置无法保存等问题。

为了解决这些问题,Sndow CMS 提供了专门的主题开发 Skill,帮助开发者按照系统当前真实接口进行主题开发、修改、排错和维护。

什么是 Sndow CMS 主题开发 Skill?

Sndow CMS 主题开发 Skill 是一套面向开发者和 AI 编程助手的主题开发规范,适用于 sd_content/themes 目录下的主题项目。

它不会简单罗列函数,而是结合 Sndow CMS 当前的模板加载方式、主题生命周期、CSF 设置框架、侧边栏系统和模板标签,为开发者提供更加准确的开发参考。

使用这套 Skill,可以减少直接套用其他 CMS 代码所带来的兼容问题。

主题目录和主题头部规范

一个最小的 Sndow CMS 主题通常包含以下文件:

my-theme/
├── style.css
├── index.php
├── functions.php
├── header.php
└── footer.php

其中,style.css 不仅用于编写样式,还负责提供主题名称、版本、作者和主题地址等信息。

/*
Theme Name: 我的主题
Theme URI: https://www.sndow.com/index/store/detail/id/22.html
Author: 作者或团队
Author URI: https://www.sndow.com/index/store/author/id/1.html
Description: 主题描述
Version: 1.0.0
*/

主题发布到应用商店时,Theme URIAuthor URI 应该填写真实的官网应用地址和作者地址。如果官网开启了应用包 URI 校验,地址中的应用 ID 和作者 ID 还需要与当前应用保持一致。

使用正确的主题生命周期函数

Sndow CMS 当前推荐使用带主题 slug 前缀的生命周期函数。

例如主题目录名称为:

sd-community

对应的生命周期函数应该写成:

function sd_community_theme_install() {
    // 主题启用时执行
}

function sd_community_theme_uninstall() {
    // 主题删除时执行
}

function sd_community_theme_upgrade() {
    // 主题升级时执行
}

旧版本中的 theme_install()theme_uninstall()theme_upgrade() 仅用于兼容旧主题。新主题继续使用通用函数,可能与其他主题产生函数重复声明错误。

推荐使用 sd_init 注册主题功能

主题需要注册资源、侧边栏或小工具时,推荐使用 sd_init

function my_theme_setup() {
    sd_enqueue_style(
        'my-theme-style',
        sd_get_theme_url('assets/css/theme.css')
    );

    sd_register_sidebar(
        'my-theme-sidebar',
        '主题侧边栏',
        '主题专用侧边栏区域'
    );
}

add_action('sd_init', 'my_theme_setup');

sd_init 是 Sndow CMS 提供的初始化钩子。相比直接依赖模板阶段的 init,使用 sd_init 更适合完成主题初始化工作。

使用 The Loop 和主题模板函数

Sndow CMS 提供了自己的 The Loop 和模板标签,开发者不需要频繁直接读取 $sd_post 数组。

<?php if (have_posts()): ?>
    <?php while (have_posts()): the_post(); ?>
        <article class="post-item">
            <h2>
                <a href="<?php the_permalink(); ?>">
                    <?php the_title(); ?>
                </a>
            </h2>

            <p><?php the_excerpt(140); ?></p>

            <span><?php the_author(); ?></span>
            <time><?php the_date('Y-m-d'); ?></time>
        </article>
    <?php endwhile; ?>

    <?php sd_pagination(); ?>
<?php endif; ?>

常用模板函数包括:

the_title();
the_permalink();
the_content();
the_author();
the_date();
the_category();
the_views();
the_post_thumbnail();
has_post_thumbnail();
the_excerpt();

使用这些函数可以让模板结构更加清晰,也方便主题在未来适配系统功能更新。

内置 SEO 和 TDK 支持

主题开发 Skill 还整理了 Sndow CMS 的 SEO 调用方式。

header.php 中,可以直接使用:

<title><?php echo sd_tdk_field('title'); ?></title>
<meta name="description" content="<?php echo sd_tdk_field('description'); ?>">
<meta name="keywords" content="<?php echo sd_tdk_field('keywords'); ?>">
<meta name="robots" content="<?php echo sd_tdk_field('robots'); ?>">

<?php sd_head(); ?>

sd_tdk_field() 会自动读取当前页面对应的标题、描述、关键词和 robots 设置,并完成必要的 HTML 转义。

系统还会通过 sd_head() 输出 canonical、Open Graph 等 SEO 相关内容,主题不需要重复实现相同功能。

主题设置和 CSF Field

主题设置统一放在 options.php 中,并使用系统内置的 CSF 接口。

CSF::createOptions('theme_options', [
    'menu_title' => '主题设置',
    'menu_slug' => 'theme_options',
    'option_name' => 'sd_theme_options_' . sd_get_theme_name(),
]);

CSF::createSection('theme_options', [
    'title' => '基础设置',
    'fields' => [
        [
            'id' => 'site_logo',
            'type' => 'upload',
            'title' => '站点 Logo',
        ],
        [
            'id' => 'accent_color',
            'type' => 'color',
            'title' => '强调色',
            'default' => '#405cf5',
        ],
    ],
]);

当前系统支持文本、文本域、代码编辑器、数字、开关、单选、多选、分类选择、页面选择、上传、颜色、图标、重复器、排序器等多种字段类型。

主题中可以使用以下方式读取设置:

$logo = sd_theme_option('site_logo', '');
$color = sd_theme_option('accent_color', '#405cf5');

评论、小工具和上传功能

主题开发 Skill 同时覆盖了评论、小工具和资源上传功能。

判断评论是否开启:

<?php if (sd_comments_open()): ?>
    <?php sd_theme_file('comments'); ?>
<?php endif; ?>

注册自定义小工具:

sd_register_widget_type('my_theme_notice', [
    'name' => '主题提示卡',
    'icon' => 'bi-info-circle',
    'render_callback' => function ($config) {
        echo '<div>' .
            htmlspecialchars($config['text'] ?? '', ENT_QUOTES, 'UTF-8') .
            '</div>';
    },
]);

主题需要处理上传时,可以直接调用全局上传函数:

$result = sd_upload_file($_FILES['file'], [
    'allowed_exts' => ['jpg', 'png', 'mp4'],
    'allowed_mimes' => ['image/jpeg', 'image/png', 'video/mp4'],
    'max_size_mb' => 20,
]);

系统会统一处理文件类型、MIME、大小、上传目录和附件记录。

适合哪些开发场景?

Sndow CMS 主题开发 Skill 适合以下场景:

  • 从零开发博客、资讯、资源展示主题
  • 将旧主题改造成 Sndow CMS 最新写法
  • 修复主题切换、模板加载和设置保存问题
  • 开发主题小工具和侧边栏
  • 增加 CSF 主题设置字段
  • 优化主题 SEO 和内容模板
  • 检查主题发布包和生命周期函数
  • 让 AI 编程助手按照 Sndow CMS 真实接口工作

总结

Sndow CMS 主题开发 Skill 的核心价值,是让主题开发从“凭经验试错”转变为“按照系统真实接口开发”。

通过统一的模板函数、主题生命周期、CSF 设置、小工具、评论开关和 SEO 调用方式,开发者可以更快完成主题开发,也能减少因使用旧写法或其他 CMS 函数而产生的兼容问题。

点击下载skill