A minimal WordPress theme. Sinxelo is Galician for "simple." An updated continuation of Simppeli by Sami Keijonen: combined, modernized, and extended with Gutenberg block support. Since Simppeli means "simple" in Finnish, sinxelo looks, sounds, and feels appropriate.
For several years I used Simppeli (parent) + a customized child theme on my personal website. Over time the parent/child relationship became a liability:
- The parent was last updated in 2017
- Every template change required tracking which file "won"
- Site-specific integrations (SSP, Jetpack, year archives, taxonomies) were tangled into the child theme
- The theme had no Gutenberg block support
Rather than migrate to Full Site Editing, which I want to explore as a separate project, I took a different path: merge everything into one standalone classic theme, add block editor support where it makes sense (content area only), and extract site-specific code into its own plugin.
This is not an FSE theme. There is no Site Editor. No block templates. No templates/*.html files. Layout decisions are made in PHP, which is where I want them.
Blocks are used as content tools, not layout tools. The block editor is active in posts and pages. Custom blocks (callout box) live in blocks/. The Site Editor is not available.
sinxelo/
├── style.css # Theme header + merged CSS (parent base + child additions)
├── theme.json # Minimal block editor tokens: 6 colors, 3 fonts, no free-form picker
├── functions.php # Theme setup, enqueue, blocks, shortcodes, content filters
│
├── index.php # Fallback template
├── single.php # Single post
├── page.php # Page
├── archive.php # Archive
├── search.php # Search results
├── 404.php # 404 (custom messaging)
├── comments.php # Comments template
├── header.php # Header
├── footer.php # Footer (custom links + motto)
├── menu-primary.php # Primary nav
├── page-titleless.php # Custom template: page without title
│
├── template-parts/
│ ├── content.php # Default post (stream view)
│ ├── content-single.php # Single post
│ ├── content-page.php # Page
│ ├── content-search.php # Search result item
│ └── content-none.php # No results
│
├── inc/
│ ├── template-tags.php # sinxelo_posted_on(), sinxelo_entry_footer(), etc.
│ ├── extras.php # Body classes
│ ├── customizer.php # Customizer live preview
│ ├── custom-header.php # Custom header image support
│ └── custom-background.php # Custom background support
│
├── blocks/
│ └── callout/ # sinxelo/callout — InnerBlocks callout box
│ ├── block.json
│ ├── index.js
│ └── index.asset.php
│
├── assets/
│ ├── css/
│ │ └── editor-style.css # Block editor styles (typography, colors, callout)
│ └── fonts/ # Locally hosted Noto Sans + Noto Serif (woff2)
│ ├── noto-sans-normal-latin.woff2
│ ├── noto-sans-normal-latin-ext.woff2
│ ├── noto-sans-italic-latin.woff2
│ ├── noto-sans-italic-latin-ext.woff2
│ ├── noto-serif-normal-latin.woff2
│ ├── noto-serif-normal-latin-ext.woff2
│ ├── noto-serif-italic-latin.woff2
│ └── noto-serif-italic-latin-ext.woff2
│
└── js/
├── skip-link-focus-fix.js # Accessibility
└── customizer.js # Customizer live preview
Site-specific code (SSP podcast integrations, Jetpack config, year archive rewrites, language taxonomy, [ola] shortcode) lives in a separate plugin: ats-site.
In this theme:
- Presentation, typography, layout templates
sinxelo/calloutblock +[callout]shortcode (backward compat)- Generic shortcodes:
[searchform],[tag_cloud],[category_cloud](posts only) - Easy anchors (heading ID injection, folded in from standalone plugin)
- Archive title cleanup filter
- Disable Twemoji
In ats-site plugin:
- Seriously Simple Podcasting integrations
- Jetpack related posts configuration
- Year archive URL rewrites (
/year/####/) languagetaxonomy- Sitemap filters
[ola]Galician greeting shortcode +ats/olablock[category_cloud]with podcast CPT override
theme.json locks the editor to the theme's design system:
- Colors: Text, Heading, Background, Border, Highlight (gold
#F4E28A), Muted — no free-form color picker - Fonts: Noto Serif, Noto Sans, Monospace — no arbitrary font choices
- No gradients, no custom spacing controls
Fonts are served locally from assets/fonts/. The OMGF plugin can be deactivated.
A yellow highlight box that wraps any inner blocks. Registered in blocks/callout/. The classic [callout]...[/callout] shortcode remains active as a fallback for existing content.
- Simppeli by Sami Keijonen — the parent theme this is based on
- Underscores by Automattic — the foundation Simppeli was built on
- Licensed under GPL v2 or later