Initial theme scaffolding (v0.0.1)

- Bootstrap 5 CSS/JS integration via Yarn (served locally)
- Dart Sass build pipeline with PostCSS, Autoprefixer, cssnano
- Twig 3.0 via Composer with PSR-4 autoloading
- FSE block theme templates (index, home, single, page, archive, search, 404)
- Template parts (header, footer) and block patterns
- theme.json with Bootstrap 5-aligned design tokens
- Gitea CI/CD workflow for automated release packages
- WordPress i18n support (en_US base, de_CH translation)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-02-08 02:25:33 +01:00
commit d7415b9747
51 changed files with 15596 additions and 0 deletions

44
patterns/comments.php Normal file
View File

@@ -0,0 +1,44 @@
<?php
/**
* Title: Comments
* Slug: wp-bootstrap/comments
* Categories: posts
* Description: Comments section with form.
*
* @package WPBootstrap
* @since 0.0.1
*/
?>
<!-- wp:comments {"style":{"spacing":{"padding":{"top":"var:preset|spacing|60"}}}} -->
<div class="wp-block-comments" style="padding-top:var(--wp--preset--spacing--60)">
<!-- wp:heading {"fontSize":"large"} -->
<h2 class="has-large-font-size"><?php esc_html_e( 'Comments', 'wp-bootstrap' ); ?></h2>
<!-- /wp:heading -->
<!-- wp:comment-template -->
<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|20","padding":{"bottom":"var:preset|spacing|40"}}},"layout":{"type":"flex","flexWrap":"nowrap","verticalAlignment":"top"}} -->
<div class="wp-block-group" style="padding-bottom:var(--wp--preset--spacing--40)">
<!-- wp:avatar {"size":40} /-->
<!-- wp:group {"layout":{"type":"default"}} -->
<div class="wp-block-group">
<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|10"}},"layout":{"type":"flex","flexWrap":"wrap"},"fontSize":"small"} -->
<div class="wp-block-group has-small-font-size">
<!-- wp:comment-author-name /-->
<!-- wp:comment-date /-->
<!-- wp:comment-edit-link /-->
</div>
<!-- /wp:group -->
<!-- wp:comment-content /-->
<!-- wp:comment-reply-link {"fontSize":"small"} /-->
</div>
<!-- /wp:group -->
</div>
<!-- /wp:group -->
<!-- /wp:comment-template -->
<!-- wp:comments-pagination {"layout":{"type":"flex","justifyContent":"space-between"}} -->
<!-- wp:comments-pagination-previous /-->
<!-- wp:comments-pagination-numbers /-->
<!-- wp:comments-pagination-next /-->
<!-- /wp:comments-pagination -->
<!-- wp:post-comments-form /-->
</div>
<!-- /wp:comments -->

49
patterns/footer.php Normal file
View File

@@ -0,0 +1,49 @@
<?php
/**
* Title: Footer
* Slug: wp-bootstrap/footer
* Categories: footer
* Block Types: core/template-part/footer
* Description: Site footer with site title, tagline, and credits.
*
* @package WPBootstrap
* @since 0.0.1
*/
?>
<!-- wp:group {"style":{"spacing":{"padding":{"top":"var:preset|spacing|60","bottom":"var:preset|spacing|50"}}},"layout":{"type":"constrained"}} -->
<div class="wp-block-group" style="padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--50)">
<!-- wp:group {"align":"wide","layout":{"type":"default"}} -->
<div class="wp-block-group alignwide">
<!-- wp:group {"align":"full","style":{"spacing":{"blockGap":"var:preset|spacing|20"}},"layout":{"type":"flex","flexWrap":"wrap","justifyContent":"space-between"}} -->
<div class="wp-block-group alignfull">
<!-- wp:site-title {"level":3} /-->
<!-- wp:site-tagline /-->
</div>
<!-- /wp:group -->
<!-- wp:spacer {"height":"var:preset|spacing|60"} -->
<div style="height:var(--wp--preset--spacing--60)" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->
<!-- wp:group {"align":"full","style":{"spacing":{"blockGap":"var:preset|spacing|20"}},"layout":{"type":"flex","flexWrap":"wrap","justifyContent":"space-between"}} -->
<div class="wp-block-group alignfull">
<!-- wp:paragraph {"fontSize":"small"} -->
<p class="has-small-font-size"><?php esc_html_e( 'WP Bootstrap', 'wp-bootstrap' ); ?></p>
<!-- /wp:paragraph -->
<!-- wp:paragraph {"fontSize":"small"} -->
<p class="has-small-font-size">
<?php
printf(
/* translators: Powered by WordPress. %s: WordPress link. */
esc_html__( 'Powered by %s', 'wp-bootstrap' ),
'<a href="' . esc_url( __( 'https://wordpress.org', 'wp-bootstrap' ) ) . '" rel="nofollow">WordPress</a>'
);
?>
</p>
<!-- /wp:paragraph -->
</div>
<!-- /wp:group -->
</div>
<!-- /wp:group -->
</div>
<!-- /wp:group -->

30
patterns/header.php Normal file
View File

@@ -0,0 +1,30 @@
<?php
/**
* Title: Header
* Slug: wp-bootstrap/header
* Categories: header
* Block Types: core/template-part/header
* Description: Site header with site title and navigation.
*
* @package WPBootstrap
* @since 0.0.1
*/
?>
<!-- wp:group {"align":"full","layout":{"type":"default"}} -->
<div class="wp-block-group alignfull">
<!-- wp:group {"layout":{"type":"constrained"}} -->
<div class="wp-block-group">
<!-- wp:group {"align":"wide","style":{"spacing":{"padding":{"top":"var:preset|spacing|30","bottom":"var:preset|spacing|30"}}},"layout":{"type":"flex","flexWrap":"nowrap","justifyContent":"space-between"}} -->
<div class="wp-block-group alignwide" style="padding-top:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30)">
<!-- wp:site-title {"level":0} /-->
<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|10"}},"layout":{"type":"flex","flexWrap":"nowrap","justifyContent":"right"}} -->
<div class="wp-block-group">
<!-- wp:navigation {"overlayBackgroundColor":"base","overlayTextColor":"contrast","layout":{"type":"flex","justifyContent":"right","flexWrap":"wrap"}} /-->
</div>
<!-- /wp:group -->
</div>
<!-- /wp:group -->
</div>
<!-- /wp:group -->
</div>
<!-- /wp:group -->

23
patterns/hidden-404.php Normal file
View File

@@ -0,0 +1,23 @@
<?php
/**
* Title: 404
* Slug: wp-bootstrap/hidden-404
* Inserter: no
*
* @package WPBootstrap
* @since 0.0.1
*/
?>
<!-- wp:group {"layout":{"type":"constrained"}} -->
<div class="wp-block-group">
<!-- wp:heading {"level":1,"align":"wide"} -->
<h1 class="alignwide"><?php esc_html_e( 'Page not found', 'wp-bootstrap' ); ?></h1>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p><?php esc_html_e( 'The page you are looking for does not exist, or it has been moved. Please try searching using the form below.', 'wp-bootstrap' ); ?></p>
<!-- /wp:paragraph -->
<!-- wp:pattern {"slug":"wp-bootstrap/hidden-search"} /-->
</div>
<!-- /wp:group -->

View File

@@ -0,0 +1,13 @@
<?php
/**
* Title: Blog heading
* Slug: wp-bootstrap/hidden-blog-heading
* Inserter: no
*
* @package WPBootstrap
* @since 0.0.1
*/
?>
<!-- wp:heading {"level":1} -->
<h1><?php esc_html_e( 'Blog', 'wp-bootstrap' ); ?></h1>
<!-- /wp:heading -->

View File

@@ -0,0 +1,11 @@
<?php
/**
* Title: Search
* Slug: wp-bootstrap/hidden-search
* Inserter: no
*
* @package WPBootstrap
* @since 0.0.1
*/
?>
<!-- wp:search {"label":"<?php esc_attr_e( 'Search', 'wp-bootstrap' ); ?>","showLabel":false,"placeholder":"<?php esc_attr_e( 'Search...', 'wp-bootstrap' ); ?>","buttonText":"<?php esc_attr_e( 'Search', 'wp-bootstrap' ); ?>"} /-->

View File

@@ -0,0 +1,23 @@
<?php
/**
* Title: Written by
* Slug: wp-bootstrap/hidden-written-by
* Inserter: no
*
* @package WPBootstrap
* @since 0.0.1
*/
?>
<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|10"}},"layout":{"type":"flex","flexWrap":"wrap"},"fontSize":"small"} -->
<div class="wp-block-group has-small-font-size">
<!-- wp:post-date /-->
<!-- wp:paragraph -->
<p>·</p>
<!-- /wp:paragraph -->
<!-- wp:post-author-name {"isLink":true} /-->
<!-- wp:paragraph -->
<p>·</p>
<!-- /wp:paragraph -->
<!-- wp:post-terms {"term":"category"} /-->
</div>
<!-- /wp:group -->

29
patterns/more-posts.php Normal file
View File

@@ -0,0 +1,29 @@
<?php
/**
* Title: More posts
* Slug: wp-bootstrap/more-posts
* Categories: posts
* Description: A section with more recent posts.
*
* @package WPBootstrap
* @since 0.0.1
*/
?>
<!-- wp:group {"style":{"spacing":{"padding":{"top":"var:preset|spacing|60","bottom":"var:preset|spacing|60"}}},"layout":{"type":"constrained"}} -->
<div class="wp-block-group" style="padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60)">
<!-- wp:heading {"fontSize":"large"} -->
<h2 class="has-large-font-size"><?php esc_html_e( 'More posts', 'wp-bootstrap' ); ?></h2>
<!-- /wp:heading -->
<!-- wp:query {"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","inherit":false},"layout":{"type":"constrained"}} -->
<!-- wp:post-template {"layout":{"type":"grid","columnCount":3}} -->
<!-- wp:group {"layout":{"type":"default"}} -->
<div class="wp-block-group">
<!-- wp:post-featured-image {"aspectRatio":"3/2","isLink":true} /-->
<!-- wp:post-title {"level":3,"isLink":true,"fontSize":"medium"} /-->
<!-- wp:post-date {"fontSize":"small"} /-->
</div>
<!-- /wp:group -->
<!-- /wp:post-template -->
<!-- /wp:query -->
</div>
<!-- /wp:group -->

View File

@@ -0,0 +1,20 @@
<?php
/**
* Title: Post navigation
* Slug: wp-bootstrap/post-navigation
* Categories: posts
* Description: Previous and next post links.
*
* @package WPBootstrap
* @since 0.0.1
*/
?>
<!-- wp:group {"style":{"spacing":{"padding":{"top":"var:preset|spacing|60","bottom":"var:preset|spacing|60"}}},"layout":{"type":"constrained"}} -->
<div class="wp-block-group" style="padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60)">
<!-- wp:separator {"className":"is-style-wide"} -->
<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>
<!-- /wp:separator -->
<!-- wp:post-navigation-link {"type":"previous","label":"<?php esc_attr_e( 'Previous', 'wp-bootstrap' ); ?>","arrow":"arrow"} /-->
<!-- wp:post-navigation-link {"label":"<?php esc_attr_e( 'Next', 'wp-bootstrap' ); ?>","arrow":"arrow"} /-->
</div>
<!-- /wp:group -->

View File

@@ -0,0 +1,42 @@
<?php
/**
* Title: Query loop
* Slug: wp-bootstrap/template-query-loop
* Inserter: no
*
* @package WPBootstrap
* @since 0.0.1
*/
?>
<!-- wp:query {"query":{"perPage":10,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","inherit":true},"align":"wide","layout":{"type":"constrained"}} -->
<!-- wp:post-template {"layout":{"type":"default"}} -->
<!-- wp:group {"style":{"spacing":{"padding":{"top":"var:preset|spacing|40","bottom":"var:preset|spacing|40"}}},"layout":{"type":"default"}} -->
<div class="wp-block-group" style="padding-top:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40)">
<!-- wp:post-title {"level":2,"isLink":true} /-->
<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|10"}},"layout":{"type":"flex","flexWrap":"wrap"},"fontSize":"small"} -->
<div class="wp-block-group has-small-font-size">
<!-- wp:post-date /-->
<!-- wp:paragraph -->
<p>·</p>
<!-- /wp:paragraph -->
<!-- wp:post-author-name {"isLink":true} /-->
</div>
<!-- /wp:group -->
<!-- wp:post-excerpt {"moreText":"<?php esc_attr_e( 'Read more', 'wp-bootstrap' ); ?>"} /-->
</div>
<!-- /wp:group -->
<!-- wp:separator {"className":"is-style-wide"} -->
<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>
<!-- /wp:separator -->
<!-- /wp:post-template -->
<!-- wp:query-pagination {"layout":{"type":"flex","justifyContent":"space-between"}} -->
<!-- wp:query-pagination-previous /-->
<!-- wp:query-pagination-numbers /-->
<!-- wp:query-pagination-next /-->
<!-- /wp:query-pagination -->
<!-- wp:query-no-results -->
<!-- wp:paragraph -->
<p><?php esc_html_e( 'No posts were found.', 'wp-bootstrap' ); ?></p>
<!-- /wp:paragraph -->
<!-- /wp:query-no-results -->
<!-- /wp:query -->