Compare commits

..

10 Commits

Author SHA1 Message Date
Adolfo Reyna
e265f2c2cb moving to container 2026-03-16 16:17:18 -04:00
Adolfo Reyna
e9c6786450 Integrated SVG logo in header and footer 2026-03-13 16:20:19 -04:00
Adolfo Reyna
0eb83a8515 Rename 'Wisdom for the Kingdom' to 'Wisdom from the Kingdom' in theme files 2026-03-13 15:18:24 -04:00
Adolfo Reyna
4752eec5d0 Implement AOS scroll animations for article cards 2026-03-13 12:05:33 -04:00
Adolfo Reyna
7ffd5532f9 Refactor search toggle to Bootstrap and add search results template 2026-03-13 11:57:56 -04:00
Adolfo Reyna
bd5222443f Update default author name and enable author section by default 2026-03-13 11:53:35 -04:00
Adolfo Reyna
cd0a626c33 Add configurable Author Section to front page 2026-03-13 11:51:36 -04:00
Adolfo Reyna
3597ef9008 Update footer text color and remove copyright text 2026-03-13 11:46:49 -04:00
Adolfo Reyna
e1f4370341 Extract newsletter into reusable template part and add Customizer support 2026-03-13 11:32:41 -04:00
Adolfo Reyna
c05a2980bb Reduce comment padding and move post navigation below comments using card template 2026-03-13 11:28:07 -04:00
14 changed files with 361 additions and 141 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

BIN
assets/.DS_Store vendored Normal file

Binary file not shown.

47
assets/images/logo.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 42 KiB

View File

@@ -8,7 +8,7 @@ if (post_password_required()) {
}
?>
<div id="comments" class="comments-area reading-container mt-5">
<div id="comments" class="comments-area reading-container mt-3">
<?php
// Move the comment form ABOVE the comments thread.
@@ -17,13 +17,13 @@ if (post_password_required()) {
$html_req = ($req ? " required='required'" : '');
$args = array(
'class_form' => 'comment-form mb-5',
'class_submit' => 'btn btn-secondary fw-bold text-uppercase mt-4 px-4 py-2',
'title_reply_before' => '<h2 id="reply-title" class="comment-reply-title h4 font-sans mb-4 fw-bold">',
'class_form' => 'comment-form mb-4',
'class_submit' => 'btn btn-secondary fw-bold text-uppercase mt-3 px-4 py-2',
'title_reply_before' => '<h2 id="reply-title" class="comment-reply-title h4 font-sans mb-3 fw-bold">',
'title_reply_after' => '</h2>',
'comment_field' => '<div class="comment-form-comment mb-4"><label for="comment" class="form-label text-muted small text-uppercase tracking-wider fw-bold">Add a Perspective <span class="text-danger">*</span></label><textarea id="comment" name="comment" cols="45" rows="4" maxlength="65525" required="required" class="form-control border-0" style="background-color: #f1f3f5;"></textarea></div>',
'comment_field' => '<div class="comment-form-comment mb-3"><label for="comment" class="form-label text-muted small text-uppercase tracking-wider fw-bold">Add a Perspective <span class="text-danger">*</span></label><textarea id="comment" name="comment" cols="45" rows="4" maxlength="65525" required="required" class="form-control border-0" style="background-color: #f1f3f5;"></textarea></div>',
'fields' => array(
'author' => '<div class="row g-3 mb-3"><div class="col-md-6 comment-form-author"><label for="author" class="form-label small fw-bold">Name ' . ($req ? '<span class="text-danger">*</span>' : '') . '</label><input id="author" name="author" type="text" value="' . esc_attr($commenter['comment_author']) . '" size="30" maxlength="245"' . $html_req . ' class="form-control bg-white" /></div>',
'author' => '<div class="row g-3 mb-2"><div class="col-md-6 comment-form-author"><label for="author" class="form-label small fw-bold">Name ' . ($req ? '<span class="text-danger">*</span>' : '') . '</label><input id="author" name="author" type="text" value="' . esc_attr($commenter['comment_author']) . '" size="30" maxlength="245"' . $html_req . ' class="form-control bg-white" /></div>',
'email' => '<div class="col-md-6 comment-form-email"><label for="email" class="form-label small fw-bold">Email ' . ($req ? '<span class="text-danger">*</span>' : '') . '</label><input id="email" name="email" type="email" value="' . esc_attr($commenter['comment_author_email']) . '" size="30" maxlength="100" aria-describedby="email-notes"' . $html_req . ' class="form-control bg-white" /></div></div>',
'url' => '<div class="comment-form-url mb-4"><label for="url" class="form-label small fw-bold">Website</label><input id="url" name="url" type="url" value="' . esc_attr($commenter['comment_author_url']) . '" size="30" maxlength="200" class="form-control bg-white" /></div>',
),
@@ -32,7 +32,7 @@ if (post_password_required()) {
?>
<?php if (have_comments()): ?>
<h2 class="comments-title mt-5 h5 font-sans border-bottom pb-3 mb-4">
<h2 class="comments-title mt-4 h5 font-sans border-bottom pb-2 mb-3">
<?php
$comment_count = get_comments_number();
if ('1' === $comment_count) {

View File

@@ -3,10 +3,12 @@
<div class="row g-5 mb-5">
<div class="col-lg-5 col-md-12">
<div class="d-flex align-items-center gap-2 mb-3">
<div class="logo-icon border-white text-white">W</div>
<span class="fs-4 fw-bold font-serif text-white">Wisdom for the Kingdom</span>
<img src="<?php echo esc_url(get_template_directory_uri() . '/assets/images/logo.svg'); ?>"
alt="<?php bloginfo('name'); ?>"
style="height: 50px; width: auto; filter: brightness(0) invert(1);">
<span class="fs-4 fw-bold font-serif text-white">Wisdom from the Kingdom</span>
</div>
<p class="small text-muted mb-0 font-sans lh-lg pe-lg-5">
<p class="small text-light mb-0 font-sans lh-lg pe-lg-5 opacity-75">
A collection of biblical insights curated for the thoughtful leader. Seek truth, lead with grace,
and explore the ancient wisdom that powers modern impact.
</p>
@@ -43,11 +45,9 @@
</div>
</div>
<div class="pt-4 text-center text-md-start d-md-flex justify-content-between align-items-center"
style="border-top: 1px solid rgba(255,255,255,0.1);">
<p class="mb-0 small text-muted font-sans">&copy; <?php echo date('Y'); ?> <?php bloginfo('name'); ?>. All
rights reserved.</p>
<p class="mb-0 small text-muted font-sans mt-2 mt-md-0 d-none d-md-block">Designed with purpose.</p>
<div class="pt-4 text-center text-md-end" style="border-top: 1px solid rgba(255,255,255,0.1);">
<p class="mb-0 small text-light font-sans mt-2 mt-md-0 d-none d-md-block opacity-50">Designed with purpose.
</p>
</div>
</div><!-- .container -->
</footer><!-- #colophon -->
@@ -55,6 +55,17 @@
<?php wp_footer(); ?>
<script>
// Initialize Anime On Scroll globally
document.addEventListener('DOMContentLoaded', function () {
AOS.init({
duration: 800,
once: true,
offset: 100
});
});
</script>
</body>
</html>

View File

@@ -54,21 +54,34 @@ $hero_bg = get_theme_mod('hero_background_image', get_template_directory_uri() .
</main><!-- #main -->
</div><!-- .container -->
<section class="bg-primary text-white py-5 mt-5">
<div class="container text-center py-5">
<h3 class="display-6 fw-bold mb-4 font-serif text-white">Receive weekly insights directly in your inbox.</h3>
<p class="lead mb-4 font-sans text-light">Join our community and get our latest thoughts sent straight to you.
</p>
<form class="mx-auto" style="max-width: 500px;">
<div class="input-group input-group-lg shadow">
<input type="email" placeholder="Your email address" class="form-control border-0 px-4" required>
<button type="submit" class="btn btn-secondary px-5 border-0 fw-bold text-uppercase h-100">
Subscribe
</button>
<?php if (get_theme_mod('show_author_section', true)): ?>
<section class="author-section py-5 bg-light border-top border-bottom">
<div class="container text-center py-4">
<?php $author_image = get_theme_mod('author_image_url', ''); ?>
<?php if ($author_image): ?>
<img src="<?php echo esc_url($author_image); ?>"
alt="<?php echo esc_attr(get_theme_mod('author_name', 'David Clemetson')); ?>"
class="rounded-circle mb-4 shadow-sm"
style="width: 150px; height: 150px; object-fit: cover; border: 4px solid white;">
<?php else: ?>
<div class="rounded-circle mb-4 shadow-sm mx-auto bg-secondary d-flex align-items-center justify-content-center text-white display-4"
style="width: 150px; height: 150px; border: 4px solid white;">
<?php
$name = get_theme_mod('author_name', 'David Clemetson');
echo esc_html(substr($name, 0, 1));
?>
</div>
</form>
<?php endif; ?>
<h2 class="display-6 fw-bold font-serif mb-3 text-dark">
<?php echo esc_html(get_theme_mod('author_name', 'David Clemetson')); ?></h2>
<p class="lead font-sans text-muted mx-auto" style="max-width: 680px;">
<?php echo wp_kses_post(get_theme_mod('author_bio', 'Exploring the intersection of faith, leadership, and modern life. Join me on a journey to uncover timeless wisdom.')); ?>
</p>
</div>
</section>
<?php endif; ?>
<?php get_template_part('template-parts/newsletter'); ?>
<?php
get_footer();

View File

@@ -40,11 +40,17 @@ function wisdom1_scripts()
// Enqueue Bootstrap CSS
wp_enqueue_style('bootstrap-style', 'https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css', array(), '5.3.3');
// Enqueue AOS (Animate On Scroll) CSS
wp_enqueue_style('aos-style', 'https://unpkg.com/aos@2.3.1/dist/aos.css', array(), '2.3.1');
// Enqueue Theme CSS (depends on Bootstrap so it loads after)
wp_enqueue_style('wisdom1-style', get_stylesheet_uri(), array('bootstrap-style'), '1.1.0');
// Enqueue Bootstrap JS Bundle (includes Popper)
wp_enqueue_script('bootstrap-script', 'https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js', array(), '5.3.3', true);
// Enqueue AOS Script
wp_enqueue_script('aos-script', 'https://unpkg.com/aos@2.3.1/dist/aos.js', array(), '2.3.1', true);
}
add_action('wp_enqueue_scripts', 'wisdom1_scripts');
@@ -114,6 +120,94 @@ function wisdom1_customize_register($wp_customize)
'section' => 'wisdom1_hero_section',
'settings' => 'hero_background_image',
)));
// Add Author Section (Front Page)
$wp_customize->add_section('wisdom1_author_section', array(
'title' => __('Author Section (Front Page)', 'wisdom1'),
'priority' => 32,
));
// Enable Author Section
$wp_customize->add_setting('show_author_section', array(
'default' => true,
'sanitize_callback' => 'rest_sanitize_boolean',
));
$wp_customize->add_control('show_author_section', array(
'label' => __('Show Author Section', 'wisdom1'),
'section' => 'wisdom1_author_section',
'type' => 'checkbox',
));
// Author Name
$wp_customize->add_setting('author_name', array(
'default' => 'David Clemetson',
'sanitize_callback' => 'sanitize_text_field',
));
$wp_customize->add_control('author_name', array(
'label' => __('Author Name', 'wisdom1'),
'section' => 'wisdom1_author_section',
'type' => 'text',
));
// Author Bio
$wp_customize->add_setting('author_bio', array(
'default' => 'Exploring the intersection of faith, leadership, and modern life. Join me on a journey to uncover timeless wisdom.',
'sanitize_callback' => 'wp_kses_post',
));
$wp_customize->add_control('author_bio', array(
'label' => __('Author Bio', 'wisdom1'),
'section' => 'wisdom1_author_section',
'type' => 'textarea',
));
// Author Image
$wp_customize->add_setting('author_image_url', array(
'default' => '',
'sanitize_callback' => 'esc_url_raw',
));
$wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'author_image_url', array(
'label' => __('Author Image', 'wisdom1'),
'section' => 'wisdom1_author_section',
)));
// Add Newsletter Section
$wp_customize->add_section('wisdom1_newsletter_section', array(
'title' => __('Newsletter Section', 'wisdom1'),
'priority' => 35,
));
// Newsletter Headline
$wp_customize->add_setting('newsletter_headline', array(
'default' => 'Receive weekly insights directly in your inbox.',
'sanitize_callback' => 'sanitize_text_field',
));
$wp_customize->add_control('newsletter_headline', array(
'label' => __('Headline', 'wisdom1'),
'section' => 'wisdom1_newsletter_section',
'type' => 'text',
));
// Newsletter Subheadline
$wp_customize->add_setting('newsletter_subheadline', array(
'default' => 'Join our community and get our latest thoughts sent straight to you.',
'sanitize_callback' => 'sanitize_text_field',
));
$wp_customize->add_control('newsletter_subheadline', array(
'label' => __('Subheadline', 'wisdom1'),
'section' => 'wisdom1_newsletter_section',
'type' => 'textarea',
));
// Newsletter Button Text
$wp_customize->add_setting('newsletter_button_text', array(
'default' => 'Subscribe',
'sanitize_callback' => 'sanitize_text_field',
));
$wp_customize->add_control('newsletter_button_text', array(
'label' => __('Button Text', 'wisdom1'),
'section' => 'wisdom1_newsletter_section',
'type' => 'text',
));
}
add_action('customize_register', 'wisdom1_customize_register');

44
google-login-plan.md Normal file
View File

@@ -0,0 +1,44 @@
# Google Login & User Registration Implementation Plan
To allow users to seamlessly register, log in, and interact with the Wisdom1 site using their Google accounts, we will use a secure OAuth bridging plugin. This is the industry-standard approach for WordPress.
## Recommended Plugin
**Nextend Social Login and Register**
- Free for Google integration.
- Highly secure (uses native Google OAuth 2.0).
- Does NOT store user passwords.
- Automatically creates a native WordPress "Subscriber" account upon first login, granting them permission to comment.
## Step 1: Google Cloud Configuration (Manual Setup)
Before activating the plugin on the site, you must generate secure OAuth credentials from your Google account.
1. Log into the [Google Developer Console](https://console.cloud.google.com/).
2. Create a new Project (e.g., "Wisdom1 Auth").
3. Navigate to **APIs & Services > OAuth consent screen** and configure it for "External" users.
4. Navigate to **Credentials > Create Credentials > OAuth client ID**.
5. Select **Web application** as the application type.
6. Under **Authorized redirect URIs**, add the specific URL the Nextend plugin generates (this will be provided once the plugin is installed, typically `http://wisdom1.local/wp-login.php?loginSocial=google`).
7. Once created, you will be provided a **Client ID** and a **Client Secret**. Keep these secure.
## Step 2: WordPress Plugin Setup
1. Install and activate the `nextend-facebook-connect` plugin.
2. Navigate to **Settings > Nextend Social Login**.
3. Enable the Google provider.
4. Paste the **Client ID** and **Client Secret** generated in Step 1.
5. Verify the connection through the plugin's test panel.
## Step 3: Custom Theme Integration (Development)
Rather than relying on the plugin's default styling, we will seamlessly integrate the login flow into the `wisdom1` theme's aesthetic.
### Modifications Required:
1. **`comments.php`**:
- Intercept the logged-out state.
- Replace the standard name/email/website form fields with a prominent, beautifully styled **"Continue with Google"** button.
- When clicked, this button will direct the user through the Google OAuth flow and redirect them back to the article, fully logged in.
2. **`functions.php`**:
- Ensure the user's Google display name is correctly mapped to their WordPress display name so that comments render beautifully.
## Verification
- Test clicking "Continue with Google" as a logged-out guest.
- Authenticate with a personal Google account.
- Verify that a new WordPress user is provisioned in the database.
- Verify the user is redirected back to the article and is able to leave a personalized comment.

View File

@@ -9,20 +9,19 @@
<link
href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700&family=Playfair+Display:ital,wght@0,700;1,700&display=swap"
rel="stylesheet">
<!-- Alpine.js for lightweight interactivity -->
<script defer src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.min.js"></script>
<?php wp_head(); ?>
</head>
<body <?php body_class('bg-light'); ?> x-data="{ searchOpen: false }">
<body <?php body_class('bg-light'); ?>>
<?php wp_body_open(); ?>
<div id="page" class="site d-flex flex-column min-vh-100">
<header id="masthead" class="site-header sticky-top bg-white shadow-sm">
<nav class="navbar navbar-expand-lg navbar-light container py-3">
<a href="<?php echo esc_url(home_url('/')); ?>"
class="navbar-brand fw-bold fs-4 d-flex align-items-center">
<span class="text-primary me-2">W</span>
<span class="d-none d-sm-inline">Wisdom for the Kingdom</span>
<img src="<?php echo esc_url(get_template_directory_uri() . '/assets/images/logo.svg'); ?>"
alt="<?php bloginfo('name'); ?>" class="me-2" style="height: 40px; width: auto;">
<span class="d-none d-sm-inline">Wisdom from the Kingdom</span>
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse"
@@ -48,7 +47,8 @@
?>
<button
class="btn btn-outline-secondary ms-lg-3 rounded-circle p-2 d-flex align-items-center justify-content-center"
@click="searchOpen = !searchOpen" aria-label="Toggle search">
data-bs-toggle="collapse" data-bs-target="#searchCollapse" aria-expanded="false"
aria-controls="searchCollapse" aria-label="Toggle search">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="11" cy="11" r="8"></circle>
@@ -58,13 +58,13 @@
</div>
</nav>
<!-- Search Overlay (Alpine.js) -->
<div class="search-overlay position-absolute w-100 bg-white border-bottom shadow-sm" x-show="searchOpen"
x-transition @click.away="searchOpen = false" style="display: none; top: 100%; z-index: 1050;">
<!-- Search Overlay (Bootstrap Collapse) -->
<div class="collapse search-overlay position-absolute w-100 bg-white border-bottom shadow-sm"
id="searchCollapse" style="top: 100%; z-index: 1050;">
<div class="container py-4">
<form role="search" method="get" class="d-flex" action="<?php echo esc_url(home_url('/')); ?>">
<input type="search" class="form-control form-control-lg me-2" placeholder="Search wisdom..."
value="<?php echo get_search_query(); ?>" name="s" x-ref="searchInput">
value="<?php echo get_search_query(); ?>" name="s">
<button type="submit" class="btn btn-primary btn-lg px-4">Search</button>
</form>
</div>

View File

@@ -8,47 +8,66 @@ get_header();
<div class="bg-light py-5 border-bottom mb-5">
<div class="container text-center">
<h1 class="display-5 fw-bold mb-3">
<?php
/* translators: %s: search query. */
printf(esc_html__('Search Results for: %s', 'wisdom1'), '<span>' . get_search_query() . '</span>');
?>
<?php if (have_posts()): ?>
<h1 class="display-4 fw-bold mb-3 font-serif">
<?php printf(esc_html__('Search Results for: %s', 'wisdom1'), '<span class="text-primary">' . get_search_query() . '</span>'); ?>
</h1>
<p class="lead text-muted mx-auto w-75 font-sans">
<?php printf(esc_html__('Showing results matching your query.'), 'wisdom1'); ?>
</p>
<?php else: ?>
<h1 class="display-4 fw-bold mb-3 font-serif"><?php esc_html_e('Nothing Found', 'wisdom1'); ?></h1>
<p class="lead text-muted mx-auto w-75 font-sans">
<?php esc_html_e('Sorry, but nothing matched your search terms. Please try again with some different keywords.', 'wisdom1'); ?>
</p>
<?php endif; ?>
</div>
</div>
<main id="primary" class="site-main container mb-5">
<div class="container mb-5">
<main id="primary" class="site-main">
<div class="row g-4">
<?php if (have_posts()): ?>
<?php
/* Start the Loop */
if (have_posts()):
while (have_posts()):
the_post();
get_template_part('template-parts/content', 'card');
endwhile;
echo '</div>'; // close row
the_posts_navigation(array(
'screen_reader_text' => 'Posts navigation',
'prev_text' => '<span class="btn btn-outline-primary">&larr; Older Results</span>',
'next_text' => '<span class="btn btn-outline-primary">Newer Results &rarr;</span>',
'class' => 'd-flex justify-content-between my-5 col-12'
'class' => 'd-flex justify-content-between my-5'
));
else:
?>
<div class="col-12 text-center py-5">
<h2 class="h3 mb-4">Nothing Found</h2>
<p class="lead text-muted mb-4">Sorry, but nothing matched your search terms. Please try again with some
different keywords.</p>
<div class="search-container mx-auto" style="max-width: 500px;">
<?php get_search_form(); ?>
<div class="col-12 col-md-8 mx-auto text-center py-5">
<div class="card border-0 bg-light p-5 rounded-4 text-center">
<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" class="text-muted mx-auto mb-4">
<circle cx="11" cy="11" r="8"></circle>
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
</svg>
<h3 class="h4 font-serif fw-bold mb-3">No matching articles found.</h3>
<p class="text-muted mb-4">Try searching for different keywords or explore our latest articles
below.</p>
<form role="search" method="get" class="d-flex w-75 mx-auto"
action="<?php echo esc_url(home_url('/')); ?>">
<input type="search" class="form-control form-control-lg me-2" placeholder="Search wisdom..."
value="<?php echo get_search_query(); ?>" name="s">
<button type="submit" class="btn btn-primary btn-lg px-4">Search</button>
</form>
</div>
</div>
</div>
<?php
endif;
?>
</div><!-- .row -->
</main><!-- #main -->
</main>
</div>
<?php
get_footer();

View File

@@ -69,50 +69,7 @@ get_header(); ?>
?>
</div>
</footer><!-- .entry-footer -->
</article><!-- #post-<?php the_ID(); ?> -->
<div class="mx-auto px-3" style="max-width: 680px;">
<nav class="navigation post-navigation mt-5 border-top border-bottom py-4" aria-label="Posts">
<div class="row justify-content-between g-4">
<div class="col-md-6 text-start">
<?php
$prev_post = get_previous_post();
if (!empty($prev_post)):
?>
<a href="<?php echo esc_url(get_permalink($prev_post->ID)); ?>"
class="text-decoration-none d-flex align-items-center gap-3">
<?php if (has_post_thumbnail($prev_post->ID)): ?>
<?php echo get_the_post_thumbnail($prev_post->ID, 'thumbnail', array('class' => 'post-nav-thumbnail shadow-sm')); ?>
<?php endif; ?>
<div>
<div class="text-muted small fw-bold mb-1 text-uppercase tracking-wider">Previous</div>
<div class="fw-bold text-dark lh-sm"><?php echo esc_html($prev_post->post_title); ?>
</div>
</div>
</a>
<?php endif; ?>
</div>
<div class="col-md-6 text-end">
<?php
$next_post = get_next_post();
if (!empty($next_post)):
?>
<a href="<?php echo esc_url(get_permalink($next_post->ID)); ?>"
class="text-decoration-none d-flex align-items-center justify-content-end gap-3 text-end">
<div>
<div class="text-muted small fw-bold mb-1 text-uppercase tracking-wider">Next</div>
<div class="fw-bold text-dark lh-sm"><?php echo esc_html($next_post->post_title); ?>
</div>
</div>
<?php if (has_post_thumbnail($next_post->ID)): ?>
<?php echo get_the_post_thumbnail($next_post->ID, 'thumbnail', array('class' => 'post-nav-thumbnail shadow-sm')); ?>
<?php endif; ?>
</a>
<?php endif; ?>
</div>
</div>
</nav>
<div class="mx-auto px-3 mb-3" style="max-width: 680px;">
<?php
// If comments are open or we have at least one comment, load up the comment template inside the constrained column.
if (comments_open() || get_comments_number()):
@@ -121,8 +78,40 @@ get_header(); ?>
?>
</div>
<?php
$prev_post = get_previous_post();
$next_post = get_next_post();
if (!empty($prev_post) || !empty($next_post)):
?>
<div class="mt-5 pt-5 border-top">
<h3 class="h4 font-serif fw-bold mb-4 text-center">More Articles</h3>
<div class="row justify-content-center gx-4 gy-4">
<?php
global $post;
$original_post = $post;
if (!empty($prev_post)) {
$post = $prev_post;
setup_postdata($post);
get_template_part('template-parts/content', 'card');
}
if (!empty($next_post)) {
$post = $next_post;
setup_postdata($post);
get_template_part('template-parts/content', 'card');
}
$post = $original_post;
wp_reset_postdata();
?>
</div>
</div>
<?php endif; ?>
<?php endwhile; // End of the loop. ?>
</main><!-- #main -->
<?php get_template_part('template-parts/newsletter'); ?>
<?php
get_footer();

View File

@@ -1,6 +1,6 @@
/*
Theme Name: Wisdom1
Description: A modern-classic Christian blog theme for "Wisdom for the Kingdom".
Description: A modern-classic Christian blog theme for "Wisdom from the Kingdom".
Version: 1.3.0
Text Domain: wisdom1
*/
@@ -181,21 +181,6 @@ a:hover {
}
/* --- 3. Custom Brand Additions --- */
.logo-icon {
font-family: 'Playfair Display', serif;
font-size: 24px;
font-weight: bold;
border: 2px solid var(--brand-deep-midnight);
color: var(--brand-deep-midnight);
width: 40px;
height: 40px;
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
}
/* Comments Styling overrides for native wp_list_comments */
.comment-list {
list-style: none;

View File

@@ -1,4 +1,4 @@
<div class="col-md-6 col-lg-4 d-flex align-items-stretch">
<div class="col-md-6 col-lg-4 d-flex align-items-stretch" data-aos="fade-up">
<article id="post-<?php the_ID(); ?>" <?php post_class('card w-100 border-0 shadow-sm overflow-hidden h-100'); ?>>
<?php if (has_post_thumbnail()): ?>
<a href="<?php the_permalink(); ?>">

View File

@@ -0,0 +1,18 @@
<section class="bg-primary text-white py-5 mt-5">
<div class="container text-center py-5">
<h3 class="display-6 fw-bold mb-4 font-serif text-white">
<?php echo esc_html(get_theme_mod('newsletter_headline', 'Receive weekly insights directly in your inbox.')); ?>
</h3>
<p class="lead mb-4 font-sans text-light">
<?php echo esc_html(get_theme_mod('newsletter_subheadline', 'Join our community and get our latest thoughts sent straight to you.')); ?>
</p>
<form class="mx-auto" style="max-width: 500px;">
<div class="input-group input-group-lg shadow">
<input type="email" placeholder="Your email address" class="form-control border-0 px-4" required>
<button type="submit" class="btn btn-secondary px-5 border-0 fw-bold text-uppercase h-100">
<?php echo esc_html(get_theme_mod('newsletter_button_text', 'Subscribe')); ?>
</button>
</div>
</form>
</div>
</section>