Files
Umbra-Bookshelf/theme/taxonomy-series.php
bdm 5b5303186a Establish Umbra-Bookshelf as the successor repository
Continues the Bookshelf history. The three plugins tracked there are
consolidated into umbra-bookshelf/ and this repository becomes the canonical
home for the plugin and the theme.

  bd-bookshelf/  ->  theme/     separate artifact, name unchanged
  (root specs)   ->  umbra-bookshelf/spec/  aligned to Umbra Bookshelf
  old plugin zips -> archive/pre-umbra-releases/

Adds a repository README and drops the Bookshelf closure notice.
2026-10-18 19:56:26 -07:00

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"> &rsaquo; </span>
<a href="<?php echo esc_url(home_url('/series/')); ?>"><?php esc_html_e('Series', 'bd-bookshelf'); ?></a>
<span aria-hidden="true"> &rsaquo; </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();