Initial theme commit

This commit is contained in:
2026-04-12 22:08:32 +02:00
commit 4d0189a7f2
27 changed files with 2503 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
.DS_Store
Thumbs.db
*.zip

7
404.php Executable file
View File

@@ -0,0 +1,7 @@
<?php get_header(); ?>
<main class="site-main">
<div class="narrow">
<article class="post-card"><div class="single-post"><h1>Seite nicht gefunden</h1><p>Die URL stimmt nicht oder der Inhalt existiert nicht mehr.</p><?php get_search_form(); ?></div></article>
</div>
</main>
<?php get_footer(); ?>

13
archive.php Executable file
View File

@@ -0,0 +1,13 @@
<?php get_header(); ?>
<main class="site-main">
<div class="container content-grid">
<section class="content-area">
<header class="archive-header"><h1><?php the_archive_title(); ?></h1><div><?php the_archive_description(); ?></div></header>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); get_template_part( 'template-parts/content', get_post_type() ); endwhile; ?>
<div class="pagination"><?php the_posts_pagination(); ?></div>
<?php else : get_template_part( 'template-parts/content', 'none' ); endif; ?>
</section>
<?php get_sidebar(); ?>
</div>
</main>
<?php get_footer(); ?>

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 KiB

BIN
assets/images/footer-skyline.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
assets/images/skyline.webp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
assets/images/slide-1.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 MiB

BIN
assets/images/slide-2.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

BIN
assets/images/slide-3.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

19
assets/js/slider.js Executable file
View File

@@ -0,0 +1,19 @@
document.addEventListener('DOMContentLoaded', function () {
const slider = document.querySelector('.hero-slider');
if (!slider) return;
const slides = Array.from(slider.querySelectorAll('.slide'));
const dots = Array.from(slider.querySelectorAll('.slider-dot'));
if (slides.length < 2) return;
let current = 0;
function showSlide(index) {
slides.forEach((slide, i) => slide.classList.toggle('is-active', i === index));
dots.forEach((dot, i) => dot.classList.toggle('is-active', i === index));
current = index;
}
dots.forEach((dot) => dot.addEventListener('click', function () {
showSlide(Number(this.getAttribute('data-slide')));
}));
setInterval(function () {
showSlide((current + 1) % slides.length);
}, 5000);
});

8
comments.php Executable file
View File

@@ -0,0 +1,8 @@
<?php if ( post_password_required() ) { return; } ?>
<section class="comments-area">
<?php if ( have_comments() ) : ?>
<h2 class="comments-title">Kommentare</h2>
<ol class="comment-list"><?php wp_list_comments(); ?></ol>
<?php endif; ?>
<?php comment_form(); ?>
</section>

29
footer.php Executable file
View File

@@ -0,0 +1,29 @@
<footer class="site-footer">
<div class="footer-image">
<img src="<?php echo get_template_directory_uri(); ?>/assets/images/footer-skyline.png" alt="Skyline">
</div>
<div class="container footer-content">
<div class="footer-links">
<?php
wp_nav_menu([
'theme_location' => 'footer',
'container' => false,
'menu_class' => 'footer-menu',
'fallback_cb' => false
]);
?>
</div>
<p class="footer-copy">
© <?php echo esc_html(gmdate('Y')); ?> <?php bloginfo('name'); ?>
</p>
</div>
</footer>
<?php wp_footer(); ?>
</body>
</html>

31
front-page.php Executable file
View File

@@ -0,0 +1,31 @@
<?php get_header(); ?>
<?php get_template_part( 'template-parts/slider' ); ?>
<main class="site-main">
<div class="container content-grid">
<section class="content-area">
<?php while ( have_posts() ) : the_post(); ?>
<article id="post-<?php the_ID(); ?>" <?php post_class( 'page-content-card' ); ?>>
<div class="page-content-card">
<h1 class="entry-title"><?php the_title(); ?></h1>
<div class="entry-content"><?php the_content(); ?></div>
</div>
</article>
<?php endwhile; ?>
<section class="post-list">
<h2>Neueste Beiträge</h2>
<?php
$kgv_posts = new WP_Query( array( 'post_type' => 'post', 'posts_per_page' => 5 ) );
if ( $kgv_posts->have_posts() ) :
while ( $kgv_posts->have_posts() ) : $kgv_posts->the_post();
get_template_part( 'template-parts/content', get_post_type() );
endwhile;
wp_reset_postdata();
endif;
?>
</section>
</section>
<?php get_sidebar(); ?>
</div>
</main>
<?php get_footer(); ?>

1305
functions.php Executable file

File diff suppressed because it is too large Load Diff

25
header.php Executable file
View File

@@ -0,0 +1,25 @@
<?php if ( ! defined( 'ABSPATH' ) ) { exit; } ?><!doctype html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1">
<?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<?php wp_body_open(); ?>
<header class="site-header">
<div class="container header-inner">
<div class="branding">
<?php if ( function_exists( 'the_custom_logo' ) && has_custom_logo() ) : ?>
<div class="site-logo"><?php the_custom_logo(); ?></div>
<?php endif; ?>
<div class="branding-text">
<a class="site-title" href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php bloginfo( 'name' ); ?></a>
<?php if ( get_bloginfo( 'description' ) ) : ?><p class="site-description"><?php bloginfo( 'description' ); ?></p><?php endif; ?>
</div>
</div>
<nav class="main-navigation" aria-label="<?php esc_attr_e( 'Hauptmenü', 'kgv-classic' ); ?>">
<?php wp_nav_menu( array( 'theme_location' => 'primary', 'container' => false, 'fallback_cb' => 'wp_page_menu' ) ); ?>
</nav>
</div>
</header>

53
index.php Executable file
View File

@@ -0,0 +1,53 @@
<?php get_header(); ?>
<?php if ( is_home() || is_front_page() ) : ?>
<?php get_template_part( 'template-parts/slider' ); ?>
<?php endif; ?>
<main class="site-main">
<div class="container content-grid">
<section class="content-area">
<?php
$kgv_featured_post_id = absint( get_theme_mod( 'kgv_featured_post_id' ) );
?>
<?php
// Featured Beitrag oben anzeigen
if ( ( is_home() || is_front_page() ) && $kgv_featured_post_id ) :
$featured_post = get_post( $kgv_featured_post_id );
if ( $featured_post && 'publish' === $featured_post->post_status ) :
setup_postdata( $GLOBALS['post'] = $featured_post );
get_template_part( 'template-parts/content', get_post_type() );
wp_reset_postdata();
endif;
endif;
?>
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php if ( $kgv_featured_post_id && get_the_ID() === $kgv_featured_post_id ) : ?>
<?php continue; ?>
<?php endif; ?>
<?php get_template_part( 'template-parts/content', get_post_type() ); ?>
<?php endwhile; ?>
<div class="pagination">
<?php the_posts_pagination(); ?>
</div>
<?php else : ?>
<?php get_template_part( 'template-parts/content', 'none' ); ?>
<?php endif; ?>
</section>
<?php get_sidebar(); ?>
</div>
</main>
<?php get_footer(); ?>

22
maintenance.php Executable file
View File

@@ -0,0 +1,22 @@
<!DOCTYPE html><html lang="fr-FR">
<head>
<meta charset="UTF-8">
<title>Kleingartenverein Usedom e.V</title>
<style>
body { font-family: Helvetica, Arial, sans-serif; font-size:16px; color: #000; font-weight:normal; }
#container { width: 600px; padding: 70px 0; text-align:center; position:absolute; left:50%; top:50%; -webkit-transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%); transform: translate(-50%, -50%); }
h1 { font-size: 36px; font-weight:normal; }
</style>
</head>
<body class="home">
<div id="container">
<h1>Kleingartenverein Usedom e.V</h1>
<p>
In a permanent effort to improve our services, we currently are performing upgrades on our website.<br />
We apologize for the inconvenience, but we will be pleased to see you back in a very few minutes.
</p>
<p>The maintenance team.</p>
</div>
</body>
</html>

26
page.php Executable file
View File

@@ -0,0 +1,26 @@
<?php
$show_page_date = (bool) get_theme_mod( 'kgv_show_page_date', 1 );
$hidden_page_ids = function_exists( 'kgv_get_hidden_page_date_ids' ) ? kgv_get_hidden_page_date_ids() : array();
$hide_date_on_this_page = in_array( get_the_ID(), $hidden_page_ids, true );
?>
<?php get_header(); ?>
<?php if ( is_front_page() ) : get_template_part( 'template-parts/slider' ); endif; ?>
<main class="site-main">
<div class="container content-grid">
<section class="content-area">
<?php while ( have_posts() ) : the_post(); ?>
<article id="post-<?php the_ID(); ?>" <?php post_class( 'page-content-card' ); ?>>
<div class="page-content-card">
<h1 class="entry-title"><?php the_title(); ?></h1>
<?php if ( $show_page_date && ! $hide_date_on_this_page ) : ?>
<div class="entry-meta"><?php echo esc_html( get_the_date() ); ?></div>
<?php endif; ?>
<div class="entry-content"><?php the_content(); ?></div>
</div>
</article>
<?php endwhile; ?>
</section>
<?php get_sidebar(); ?>
</div>
</main>
<?php get_footer(); ?>

12
readme.txt Executable file
View File

@@ -0,0 +1,12 @@
KGV Classic
Installieren:
1. Design > Themes > Theme hochladen
2. ZIP auswählen und aktivieren
3. Design > Menüs: Hauptmenü zuweisen
4. Design > Widgets: Sidebar befüllen
Hinweis:
- front-page.php zeigt oben Header, darunter Slider, darunter Content + Sidebar.
- Sidebar ist klassisch registriert und für Plugin-Widgets gedacht.
- Die Slideshow ist direkt im Theme eingebaut.

BIN
screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

13
search.php Executable file
View File

@@ -0,0 +1,13 @@
<?php get_header(); ?>
<main class="site-main">
<div class="container content-grid">
<section class="content-area">
<header class="archive-header"><h1>Suche: <?php echo esc_html( get_search_query() ); ?></h1></header>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); get_template_part( 'template-parts/content', get_post_type() ); endwhile; ?>
<div class="pagination"><?php the_posts_pagination(); ?></div>
<?php else : get_template_part( 'template-parts/content', 'none' ); endif; ?>
</section>
<?php get_sidebar(); ?>
</div>
</main>
<?php get_footer(); ?>

11
sidebar.php Executable file
View File

@@ -0,0 +1,11 @@
<?php if ( ! defined( 'ABSPATH' ) ) { exit; } ?>
<aside class="sidebar-area">
<?php if ( is_active_sidebar( 'sidebar-1' ) ) : ?>
<?php dynamic_sidebar( 'sidebar-1' ); ?>
<?php else : ?>
<section class="widget">
<h3 class="widget-title">Sidebar</h3>
<p>Hier kannst du Widgets aus Plugins oder WordPress selbst einfügen.</p>
</section>
<?php endif; ?>
</aside>

72
single.php Executable file
View File

@@ -0,0 +1,72 @@
<?php get_header(); ?>
<main class="site-main">
<div class="container content-grid">
<section class="content-area">
<?php while ( have_posts() ) : the_post(); ?>
<?php
$is_rest_termin = (int) get_post_meta( get_the_ID(), '_kgv_is_rest_termin', true );
$termin_datum = get_post_meta( get_the_ID(), '_kgv_termin_datum_formatted', true );
$termin_owner = get_post_meta( get_the_ID(), '_kgv_termin_owner', true );
?>
<article id="post-<?php the_ID(); ?>" <?php post_class( 'post-card single-post' ); ?>>
<div class="single-post">
<?php if ( $is_rest_termin ) : ?>
<div class="kgv-termin-single-header">
<span class="kgv-termin-badge">Termin</span>
<h1 class="entry-title"><?php the_title(); ?></h1>
<div class="kgv-termin-meta-grid">
<?php if ( ! empty( $termin_datum ) ) : ?>
<div class="kgv-termin-meta-item">
<span class="kgv-termin-meta-label">Datum</span>
<span class="kgv-termin-meta-value"><?php echo esc_html( $termin_datum ); ?></span>
</div>
<?php endif; ?>
<?php if ( ! empty( $termin_owner ) ) : ?>
<div class="kgv-termin-meta-item">
<span class="kgv-termin-meta-label">Verantwortlich</span>
<span class="kgv-termin-meta-value"><?php echo esc_html( $termin_owner ); ?></span>
</div>
<?php endif; ?>
</div>
</div>
<div class="entry-content kgv-termin-content">
<?php the_content(); ?>
</div>
<?php else : ?>
<h1 class="entry-title"><?php the_title(); ?></h1>
<div class="entry-meta">
<span><?php echo esc_html( get_the_date() ); ?></span>
<span>·</span>
<span><?php the_author(); ?></span>
</div>
<?php if ( has_post_thumbnail() ) : ?>
<div class="featured-image">
<?php the_post_thumbnail( 'large' ); ?>
</div>
<?php endif; ?>
<div class="entry-content">
<?php the_content(); ?>
</div>
<?php endif; ?>
</div>
</article>
<?php comments_template(); ?>
<?php endwhile; ?>
</section>
<?php get_sidebar(); ?>
</div>
</main>
<?php get_footer(); ?>

817
style.css Executable file
View File

@@ -0,0 +1,817 @@
/*
Theme Name: KGV Classic
Theme URI: https://apex-project.de
Author: Ronny Grobel
Author URI: https://apex-project.de
Description: Klassisches WordPress Theme mit Header, Menü, Slideshow, Content und widgetfähiger Sidebar.
Version: 1.0.0
Requires at least: 6.0
Tested up to: 6.6
Text Domain: kgv-classic
*/
:root{
--kgv-bg:#f6f1e8;
--kgv-card:#ffffff;
--kgv-text:#1d1d1d;
--kgv-muted:#6c6c6c;
--kgv-accent:#245c4f;
--kgv-border:#e4dacb;
--kgv-header-bg:#ffffff;
--kgv-footer-bg:#ffffff;
--kgv-body-font:Arial,Helvetica,sans-serif;
--kgv-heading-font:Arial,Helvetica,sans-serif;
--kgv-border-width:1px;
--kgv-inner-border-width:1px;
--kgv-card-padding:18px;
--kgv-widget-padding:16px;
--kgv-inner-box-padding:14px;
--kgv-section-gap:22px;
--kgv-card-margin-bottom:20px;
--kgv-widget-margin-bottom:24px;
--kgv-main-padding-top:28px;
--kgv-main-padding-bottom:36px;
--kgv-radius:10px;
--kgv-inner-radius:8px;
--kgv-shadow:0 10px 24px rgba(0,0,0,.06);
}
*{
box-sizing:border-box;
}
html{
-webkit-text-size-adjust:100%;
}
body{
margin:0;
background:var(--kgv-bg);
color:var(--kgv-text);
font-family:var(--kgv-body-font);
line-height:1.65;
}
h1, h2, h3, h4, h5, h6,
.entry-title,
.site-title,
.widget-title{
font-family:var(--kgv-heading-font);
}
img{
max-width:100%;
height:auto;
display:block;
}
a{
color:var(--kgv-accent);
text-decoration:none;
}
a:hover{
text-decoration:underline;
}
.container{
width:min(1180px,calc(100% - 32px));
margin:0 auto;
}
.narrow{
width:min(760px,calc(100% - 32px));
margin:0 auto;
}
.site-header{
position:sticky;
top:0;
z-index:50;
background:var(--kgv-header-bg);
backdrop-filter:blur(10px);
border-bottom:var(--kgv-border-width) solid var(--kgv-border);
}
.header-inner{
display:flex;
align-items:center;
justify-content:space-between;
gap:20px;
padding:14px 0;
}
.branding{
min-width:0;
display:flex;
align-items:center;
gap:12px;
}
.branding-text{
min-width:0;
}
.site-logo{
flex:0 0 auto;
}
.site-logo .custom-logo-link{
display:block;
}
.site-logo .custom-logo{
display:block;
width:auto;
height:auto;
max-width:56px;
max-height:56px;
}
.site-title{
display:inline-block;
font-size:1.8rem;
font-weight:800;
color:var(--kgv-text);
}
.site-description{
margin:4px 0 0;
color:var(--kgv-muted);
font-size:.95rem;
}
.main-navigation ul{
list-style:none;
margin:0;
padding:0;
display:flex;
gap:18px;
flex-wrap:wrap;
}
.main-navigation li{
margin:0;
}
.main-navigation a{
display:block;
padding:6px 0;
color:var(--kgv-text);
font-weight:600;
}
.main-navigation a:hover,
.main-navigation a:focus,
.main-navigation .current-menu-item > a,
.main-navigation .current_page_item > a,
.main-navigation .current-menu-ancestor > a{
color:var(--kgv-accent);
text-decoration:underline;
}
.main-navigation .menu-item-auth-link a{
display:block;
padding:6px 0;
color:var(--kgv-text);
font-weight:600;
background:transparent;
border:0;
border-radius:0;
}
.main-navigation .menu-item-auth-link a:hover,
.main-navigation .menu-item-auth-link a:focus{
color:var(--kgv-accent);
text-decoration:underline;
}
.main-navigation .menu-item-auth-link.is-logout a{
color:var(--kgv-text);
}
.hero-slider{
position:relative;
overflow:hidden;
background:#111;
}
.slider-track{
position:relative;
min-height:clamp(320px,42vw,560px);
}
.slide{
position:absolute;
inset:0;
opacity:0;
transition:opacity .6s ease;
}
.slide.is-active{
opacity:1;
z-index:2;
}
.slide img{
width:100%;
height:clamp(320px,42vw,560px);
object-fit:cover;
}
.slide-overlay{
position:absolute;
inset:0;
background:linear-gradient(90deg,rgba(0,0,0,.56),rgba(0,0,0,.18));
display:flex;
align-items:center;
}
.slide-content{
color:#fff;
}
.slide-content h2{
font-size:clamp(2rem,5vw,4rem);
line-height:1.05;
margin:0 0 10px;
}
.slide-content p{
max-width:650px;
margin:0 0 18px;
font-size:clamp(1rem,1.8vw,1.2rem);
}
.button{
display:inline-block;
background:#fff;
color:#111;
padding:10px 16px;
border-radius:999px;
font-weight:700;
}
.slider-dots{
position:absolute;
left:50%;
bottom:16px;
transform:translateX(-50%);
display:flex;
gap:10px;
z-index:4;
}
.slider-dot{
width:12px;
height:12px;
border-radius:999px;
border:0;
padding:0;
cursor:pointer;
background:rgba(255,255,255,.45);
}
.slider-dot.is-active{
background:#fff;
}
.site-main{
padding:var(--kgv-main-padding-top) 0 var(--kgv-main-padding-bottom);
}
.content-grid{
display:grid;
grid-template-columns:minmax(0,2.2fr) minmax(280px,.9fr);
gap:var(--kgv-section-gap);
align-items:start;
}
.post-card,
.page-content-card,
.widget,
.comments-area,
.archive-header{
background:var(--kgv-card);
border:var(--kgv-border-width) solid var(--kgv-border);
border-radius:var(--kgv-radius);
box-shadow:var(--kgv-shadow);
}
.post-card,
.page-content-card{
padding:0;
overflow:hidden;
margin:0 0 var(--kgv-card-margin-bottom);
}
.card-body,
.page-content-card,
.single-post{
padding:var(--kgv-card-padding);
}
.entry-title{
margin:0 0 8px;
font-size:clamp(1.7rem,3vw,2.2rem);
line-height:1.15;
}
.post-card .entry-title{
font-size:clamp(1.45rem,2.2vw,2rem);
}
.entry-title a{
color:var(--kgv-text);
}
.entry-meta{
display:flex;
gap:8px;
flex-wrap:wrap;
color:var(--kgv-muted);
font-size:.95rem;
margin-bottom:12px;
}
.entry-excerpt,
.entry-content{
color:var(--kgv-text);
}
.archive-header,
.comments-area{
padding:var(--kgv-card-padding);
}
.sidebar-area .widget{
padding:var(--kgv-widget-padding);
margin:0 0 var(--kgv-widget-margin-bottom);
border-radius:var(--kgv-radius);
}
.pagination .nav-links{
display:flex;
gap:10px;
flex-wrap:wrap;
}
.pagination .page-numbers{
display:inline-block;
padding:8px 12px;
border-radius:8px;
background:#fff;
border:var(--kgv-border-width) solid var(--kgv-border);
}
.comment-list{
padding-left:18px;
}
.comment-body{
background:#fff;
border:var(--kgv-inner-border-width) solid var(--kgv-border);
padding:var(--kgv-inner-box-padding);
border-radius:var(--kgv-inner-radius);
margin-bottom:12px;
}
.widget input,
.widget select,
.search-form input[type="search"],
.comment-form input,
.comment-form textarea{
width:100%;
padding:8px 10px;
border:var(--kgv-inner-border-width) solid #d7d7d7;
border-radius:5px;
background:#fff;
font-size:0.95rem;
line-height:1.4;
}
.search-form input[type="submit"],
.comment-form input[type="submit"]{
width:auto;
background:var(--kgv-accent);
color:#fff;
border:0;
border-radius:999px;
padding:10px 16px;
font-weight:700;
cursor:pointer;
}
.search-form{
display:flex;
gap:8px;
align-items:center;
}
.search-form label{
flex:1;
margin:0;
}
.search-form input[type="search"]{
min-height:38px;
}
.search-form input[type="submit"]{
padding:8px 12px;
border-radius:5px;
font-size:0.9rem;
line-height:1.2;
min-height:38px;
}
.kgv-termin-single-header{
margin-bottom:18px;
}
.kgv-termin-badge{
display:inline-block;
padding:4px 10px;
border-radius:999px;
background:var(--kgv-accent);
color:#fff;
font-size:0.8rem;
font-weight:700;
margin-bottom:12px;
}
.kgv-termin-meta-grid{
display:grid;
grid-template-columns:repeat(auto-fit,minmax(180px,1fr));
gap:12px;
margin:18px 0 6px;
}
.kgv-termin-meta-item{
background:#faf7f2;
border:var(--kgv-inner-border-width) solid var(--kgv-border);
border-radius:var(--kgv-inner-radius);
padding:var(--kgv-inner-box-padding);
}
.kgv-termin-meta-label{
display:block;
font-size:0.8rem;
color:var(--kgv-muted);
margin-bottom:4px;
text-transform:uppercase;
letter-spacing:.03em;
}
.kgv-termin-meta-value{
display:block;
font-weight:700;
color:var(--kgv-text);
}
.kgv-termin-content{
margin-top:14px;
}
.kgv-termin-import{
margin-top:8px;
}
.kgv-termin-box{
background:#faf7f2;
border:var(--kgv-inner-border-width) solid var(--kgv-border);
border-radius:var(--kgv-inner-radius);
padding:var(--kgv-inner-box-padding);
margin-bottom:16px;
}
.kgv-termin-row{
margin-bottom:8px;
color:var(--kgv-text);
}
.kgv-termin-row:last-child{
margin-bottom:0;
}
.kgv-termin-description h3{
margin:0 0 10px;
font-size:1.1rem;
color:var(--kgv-text);
}
.kgv-termin-description p{
margin:0;
}
.widget_recent_entries ul{
list-style:none;
margin:0;
padding:0;
}
.widget_recent_entries ul li{
margin-bottom:14px;
padding-bottom:10px;
border-bottom:var(--kgv-inner-border-width) solid var(--kgv-border);
}
.widget_recent_entries ul li:last-child{
margin-bottom:0;
padding-bottom:0;
border-bottom:0;
}
.widget_recent_entries ul li a{
display:block;
font-weight:600;
margin-bottom:2px;
}
.widget_recent_entries .post-date{
display:block;
font-size:0.8rem;
color:var(--kgv-muted);
}
.archive-header{
padding:var(--kgv-card-padding);
border-radius:8px;
display:flex;
align-items:center;
min-height:50px;
margin-bottom:24px;
}
.archive-header .entry-title,
.archive-header h1{
margin:0;
font-size:1.2rem;
line-height:1.2;
}
.site-footer{
background:var(--kgv-footer-bg);
backdrop-filter:blur(10px);
border-top:var(--kgv-border-width) solid var(--kgv-border);
padding:8px 0 10px;
color:var(--kgv-muted);
overflow:visible;
}
.footer-image{
width:100%;
margin:0 auto 6px;
padding:0 16px;
display:flex;
justify-content:center;
align-items:center;
}
.footer-image img{
display:block;
width:min(100%,900px);
height:auto;
margin:0 auto;
}
.footer-content{
text-align:center;
padding:20px 0 10px;
}
.footer-menu{
list-style:none;
margin:0 0 12px;
padding:0;
display:flex;
justify-content:center;
gap:20px;
flex-wrap:wrap;
}
.footer-menu li{
display:inline-block;
}
.footer-menu a{
text-decoration:none;
color:var(--kgv-text);
font-weight:600;
}
.footer-menu a:hover,
.footer-menu a:focus,
.footer-menu .current-menu-item > a,
.footer-menu .current_page_item > a,
.footer-menu .current-menu-ancestor > a{
text-decoration:underline;
color:var(--kgv-accent);
}
.footer-bottom{
display:flex;
justify-content:center;
padding:4px 0 0;
}
.footer-copy{
margin:0;
font-size:14px;
opacity:0.8;
}
/* Termine in Listen/Archiven an normales Kartendesign angleichen */
.category-termine .post-card,
.archive .post-card.kgv-termin-card,
.blog .post-card.kgv-termin-card{
background:var(--kgv-card);
border:var(--kgv-border-width) solid var(--kgv-border);
border-radius:var(--kgv-radius);
box-shadow:var(--kgv-shadow);
overflow:hidden;
}
/* Falls Termine eigene Wrapper-Klasse haben */
.kgv-termin-card{
background:var(--kgv-card);
border:var(--kgv-border-width) solid var(--kgv-border);
border-radius:var(--kgv-radius);
box-shadow:var(--kgv-shadow);
overflow:hidden;
margin:0 0 var(--kgv-card-margin-bottom);
}
.kgv-termin-card .card-body{
padding:var(--kgv-card-padding);
}
.kgv-termin-card .entry-title{
margin:0 0 8px;
font-size:clamp(1.45rem,2.2vw,2rem);
line-height:1.15;
}
.kgv-termin-card .entry-title a{
color:var(--kgv-text);
text-decoration:none;
}
.kgv-termin-card .entry-title a:hover{
text-decoration:underline;
}
.kgv-termin-card .entry-meta{
display:flex;
gap:8px;
flex-wrap:wrap;
color:var(--kgv-muted);
font-size:.95rem;
margin-bottom:12px;
}
.kgv-termin-card .entry-summary,
.kgv-termin-card .entry-content{
color:var(--kgv-text);
}
.kgv-termin-card .kgv-termin-badge{
margin-bottom:10px;
}
.kgv-termin-card .kgv-termin-date{
display:inline-block;
margin-bottom:12px;
padding:4px 10px;
border-radius:999px;
background:#faf7f2;
border:var(--kgv-inner-border-width) solid var(--kgv-border);
color:var(--kgv-text);
font-size:0.85rem;
font-weight:700;
}
/* Importierte Termine in Listen optisch an normale Beiträge angleichen */
.post-card.kgv-termin-card{
background:var(--kgv-card);
border:var(--kgv-border-width) solid var(--kgv-border);
border-radius:var(--kgv-radius);
box-shadow:var(--kgv-shadow);
overflow:hidden;
margin:0 0 var(--kgv-card-margin-bottom);
}
.post-card.kgv-termin-card .card-body{
padding:var(--kgv-card-padding);
}
.post-card.kgv-termin-card .entry-title{
font-size:clamp(1.45rem,2.2vw,2rem);
line-height:1.15;
margin:0 0 8px;
}
.post-card.kgv-termin-card .entry-title a{
color:var(--kgv-text);
}
.post-card.kgv-termin-card .entry-meta{
display:flex;
gap:8px;
flex-wrap:wrap;
color:var(--kgv-muted);
font-size:.95rem;
margin-bottom:12px;
}
.post-card.kgv-termin-card .entry-summary,
.post-card.kgv-termin-card .entry-content{
color:var(--kgv-text);
}
.post-card.kgv-termin-card .kgv-termin-import{
margin-top:8px;
}
.post-card.kgv-termin-card .kgv-termin-box{
background:#faf7f2;
border:var(--kgv-inner-border-width) solid var(--kgv-border);
border-radius:var(--kgv-inner-radius);
padding:var(--kgv-inner-box-padding);
margin-bottom:16px;
}
.post-card.kgv-termin-card .kgv-termin-row{
margin-bottom:8px;
}
.post-card.kgv-termin-card .kgv-termin-row:last-child{
margin-bottom:0;
}
.post-card.kgv-termin-card .kgv-termin-description h3{
margin:0 0 10px;
font-size:1.1rem;
}
.post-card.kgv-termin-card .kgv-termin-description p{
margin:0;
}
.featured-image{
margin:0 0 16px;
}
.card-thumb img,
.featured-image img{
width:100%;
height:auto;
}
@media (max-width: 900px){
.content-grid{
grid-template-columns:1fr;
}
.header-inner{
flex-direction:column;
align-items:flex-start;
}
.sidebar-area .widget{
margin-bottom:var(--kgv-card-margin-bottom);
}
.footer-bottom{
justify-content:center;
text-align:center;
}
}
@media (max-width: 640px){
.container,
.narrow{
width:min(100%,calc(100% - 24px));
}
.header-inner{
gap:14px;
}
.main-navigation ul{
gap:12px;
}
.slide-content p{
max-width:none;
}
.search-form{
flex-direction:column;
align-items:stretch;
}
.search-form input[type="submit"]{
width:100%;
}
}

View File

@@ -0,0 +1 @@
<article class="post-card"><div class="single-post"><h2>Kein Inhalt gefunden</h2><p>Hier ist gerade nichts vorhanden.</p></div></article>

8
template-parts/content.php Executable file
View File

@@ -0,0 +1,8 @@
<article id="post-<?php the_ID(); ?>" <?php post_class( 'post-card' ); ?>>
<?php if ( has_post_thumbnail() ) : ?><a class="card-thumb" href="<?php the_permalink(); ?>"><?php the_post_thumbnail( 'large' ); ?></a><?php endif; ?>
<div class="card-body">
<h2 class="entry-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<div class="entry-meta"><span><?php echo esc_html( get_the_date() ); ?></span><span>·</span><span><?php the_author(); ?></span></div>
<div class="entry-excerpt"><?php the_excerpt(); ?></div>
</div>
</article>

28
template-parts/slider.php Executable file
View File

@@ -0,0 +1,28 @@
<?php $slides = function_exists( 'kgv_classic_slider_items' ) ? kgv_classic_slider_items() : array(); if ( empty( $slides ) ) { return; } ?>
<section class="hero-slider" aria-label="Startseiten-Slideshow">
<div class="slider-track">
<?php foreach ( $slides as $index => $slide ) : ?>
<article class="slide<?php echo 0 === $index ? ' is-active' : ''; ?>">
<img src="<?php echo esc_url( $slide['image'] ); ?>" alt="<?php echo esc_attr( $slide['title'] ); ?>">
<div class="slide-overlay">
<div class="container slide-content">
<h2><?php echo esc_html( $slide['title'] ); ?></h2>
<p><?php echo esc_html( $slide['text'] ); ?></p>
<?php if ( ! empty( $slide['button'] ) && ! empty( $slide['label'] ) ) : ?>
<a class="button" href="<?php echo esc_url( $slide['button'] ); ?>">
<?php echo esc_html( $slide['label'] ); ?>
</a>
<?php endif; ?>
</div>
</div>
</article>
<?php endforeach; ?>
</div>
<?php if ( count( $slides ) > 1 ) : ?>
<div class="slider-dots" aria-hidden="true">
<?php foreach ( $slides as $index => $slide ) : ?>
<button class="slider-dot<?php echo 0 === $index ? ' is-active' : ''; ?>" data-slide="<?php echo esc_attr( $index ); ?>"></button>
<?php endforeach; ?>
</div>
<?php endif; ?>
</section>