142 lines
5.9 KiB
PHP
142 lines
5.9 KiB
PHP
<?php
|
|
// Copyright 2026 Umbra Tools (umbratools.com)
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
/**
|
|
* Template Name: Individual Series
|
|
*
|
|
* @package BD_Murphy
|
|
*/
|
|
|
|
get_header();
|
|
?>
|
|
|
|
<div class="single-series-container">
|
|
<?php
|
|
$term = get_queried_object();
|
|
if ($term && !empty($term->name)) :
|
|
$name = esc_html($term->name);
|
|
$description = esc_html($term->description ?: '');
|
|
|
|
// Get series image
|
|
$term_image = get_term_meta($term->term_id, 'series_image', true);
|
|
if ($term_image) {
|
|
$image_url = wp_get_attachment_url($term_image);
|
|
}
|
|
?>
|
|
|
|
<?php if (!empty($image_url)) : ?>
|
|
<div class="series-header">
|
|
<img src="<?php echo esc_url($image_url); ?>" alt="<?php echo $name; ?>">
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<div class="series-info">
|
|
<h1 class="series-name"><?php echo $name; ?></h1>
|
|
<?php if ($description) : ?>
|
|
<p class="series-blurb"><?php echo $description; ?></p>
|
|
<?php endif; ?>
|
|
</div>
|
|
|
|
<nav class="breadcrumb" aria-label="<?php esc_attr_e('Breadcrumb', 'bd-bookshelf'); ?>">
|
|
<a href="<?php echo esc_url(home_url('/')); ?>"><?php esc_html_e('Home', 'bd-bookshelf'); ?></a>
|
|
<span aria-hidden="true"> › </span>
|
|
<a href="<?php echo esc_url(home_url('/series/')); ?>"><?php esc_html_e('Series', 'bd-bookshelf'); ?></a>
|
|
<span aria-hidden="true"> › </span>
|
|
<span class="current"><?php echo $name; ?></span>
|
|
</nav>
|
|
|
|
<div class="series-books">
|
|
<?php
|
|
// Get books in this series ordered by volume number
|
|
$books_query = new WP_Query(array(
|
|
'post_type' => 'book',
|
|
'posts_per_page' => -1,
|
|
'post_status' => 'publish',
|
|
'tax_query' => array(
|
|
array(
|
|
'taxonomy' => 'series',
|
|
'field' => 'term_id',
|
|
'terms' => $term->term_id,
|
|
),
|
|
),
|
|
'meta_key' => 'volume_number',
|
|
'orderby' => 'meta_value_num',
|
|
'order' => 'ASC',
|
|
));
|
|
|
|
if ($books_query->have_posts()) :
|
|
while ($books_query->have_posts()) :
|
|
$books_query->the_post();
|
|
$book_id = get_the_ID();
|
|
$volume = get_post_meta($book_id, 'volume_number', true) ?: 1;
|
|
?>
|
|
<article class="series-book-entry">
|
|
<div class="series-book-cover">
|
|
<?php if (has_post_thumbnail()) : ?>
|
|
<a href="<?php the_permalink(); ?>">
|
|
<?php the_post_thumbnail('book-cover'); ?>
|
|
</a>
|
|
<?php else : ?>
|
|
<img src="<?php echo esc_url(get_theme_mod('bdm_default_cover', '')); ?>" alt="">
|
|
<?php endif; ?>
|
|
</div>
|
|
<div class="series-book-info">
|
|
<span class="volume-label"><?php printf(esc_html__('Book %d', 'bd-bookshelf'), esc_html($volume)); ?></span>
|
|
<h2 class="series-book-title">
|
|
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
|
|
</h2>
|
|
<?php
|
|
$pen_name = get_post_meta($book_id, 'pen_name_id', true);
|
|
if ($pen_name) {
|
|
global $wpdb;
|
|
$pen = $wpdb->get_row($wpdb->prepare("SELECT pen_name FROM {$wpdb->prefix}bd_pen_names WHERE id = %d", $pen_name));
|
|
if ($pen) {
|
|
echo '<p class="series-book-author">' . esc_html($pen->pen_name) . '</p>';
|
|
}
|
|
}
|
|
?>
|
|
<p class="series-book-blurb"><?php echo esc_html(wp_trim_words(get_post_field('post_excerpt', $book_id), 20)); ?></p>
|
|
</div>
|
|
</article>
|
|
<?php
|
|
endwhile;
|
|
wp_reset_postdata();
|
|
else :
|
|
?>
|
|
<p class="no-books-in-series"><?php esc_html_e('No books in this series yet.', 'bd-bookshelf'); ?></p>
|
|
<?php endif; ?>
|
|
</div>
|
|
<?php
|
|
else :
|
|
?>
|
|
<div class="archive-series-container">
|
|
<header class="page-header">
|
|
<h1 class="page-title"><?php esc_html_e('Series', 'bd-bookshelf'); ?></h1>
|
|
</header>
|
|
<?php
|
|
$series_list = get_terms(array('taxonomy' => 'series', 'hide_empty' => true, 'orderby' => 'name'));
|
|
if (!empty($series_list) && !is_wp_error($series_list)) :
|
|
?>
|
|
<div class="series-list">
|
|
<?php foreach ($series_list as $term) : ?>
|
|
<article class="series-entry">
|
|
<h2 class="series-name">
|
|
<a href="<?php echo esc_url(get_term_link($term)); ?>"><?php echo esc_html($term->name); ?></a>
|
|
</h2>
|
|
<?php if ($term->description) : ?>
|
|
<p class="series-description"><?php echo esc_html($term->description); ?></p>
|
|
<?php endif; ?>
|
|
</article>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
<?php else : ?>
|
|
<p class="no-series"><?php esc_html_e('No series found.', 'bd-bookshelf'); ?></p>
|
|
<?php endif; ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
|
|
<?php
|
|
get_footer();
|