200,
'height' => 200,
'flex-width' => true,
'flex-height' => true,
));
add_theme_support('custom-header', array(
'default-image' => BDM_URI . '/assets/images/banner.jpg',
'width' => 1538,
'height' => 250,
'flex-height' => false,
'header-text' => false,
'default-text-color' => '000000',
));
add_theme_support('custom-background', array(
'default-color' => 'F5F0E8',
));
// Image sizes
add_image_size('shelf-thumb', 44, 62, true);
add_image_size('blog-thumb', 100, 68, true);
add_image_size('rev-thumb', 52, 74, true);
add_image_size('book-cover', 130, 185, true);
add_image_size('book-page-cover', 220, 310, true);
add_image_size('series-card', 400, 280, true);
add_image_size('series-header', 1200, 300, true);
// Navigation menus
register_nav_menus(array(
'primary' => esc_html__('Primary Menu', 'bd-bookshelf'),
'footer' => esc_html__('Footer Menu', 'bd-bookshelf'),
));
// Widget areas
register_sidebar(array(
'name' => esc_html__('Home Sidebar', 'bd-bookshelf'),
'id' => 'home-sidebar',
'description' => esc_html__('Widget area for the book shelf on the home page', 'bd-bookshelf'),
'before_widget' => '
',
'after_widget' => '
',
'before_title' => '',
));
register_sidebar(array(
'name' => esc_html__('Footer Left', 'bd-bookshelf'),
'id' => 'footer-left',
'before_widget' => '',
'after_widget' => '
',
'before_title' => '',
));
register_sidebar(array(
'name' => esc_html__('Footer Right', 'bd-bookshelf'),
'id' => 'footer-right',
'description' => esc_html__('Widget area for the footer right section', 'bd-bookshelf'),
'before_widget' => '',
'after_widget' => '
',
'before_title' => '',
));
register_sidebar(array(
'name' => esc_html__('Book Detail Sidebar', 'bd-bookshelf'),
'id' => 'book-detail-sidebar',
'description' => esc_html__('Widget area for the book detail page sidebar', 'bd-bookshelf'),
'before_widget' => '',
'after_widget' => '
',
'before_title' => '',
));
}
add_action('after_setup_theme', 'bdm_setup');
/**
* Enqueue scripts and styles
*/
function bdm_enqueue_scripts() {
// Inline script for no-js to js class swap
wp_enqueue_script(
'bd-bookshelf-no-js',
'',
array(),
null,
true
);
wp_add_inline_script('bd-bookshelf-no-js', '
(function() {
var html = document.documentElement;
if (html.className.indexOf("no-js") !== -1) {
html.className = html.className.replace(/\\bno-js\\b/, "") + " js";
}
})();
');
// Root stylesheet (theme info)
wp_enqueue_style(
'bd-murphy-root-style',
get_stylesheet_uri(),
array(),
BDM_VERSION
);
// Main stylesheet
wp_enqueue_style(
'bd-murphy-style',
BDM_URI . '/assets/css/style.css',
array('bd-murphy-root-style'),
BDM_VERSION
);
// Local fonts (bundled Google Fonts)
wp_enqueue_style(
'bd-murphy-google-fonts',
BDM_URI . '/assets/fonts/fonts.css',
array(),
null
);
// Navigation script
wp_enqueue_script(
'bd-murphy-navigation',
BDM_URI . '/assets/js/navigation.js',
array(),
BDM_VERSION,
true
);
// Social share script
wp_enqueue_script(
'bd-murphy-social-share',
BDM_URI . '/assets/js/social-share.js',
array(),
BDM_VERSION,
true
);
// Localize navigation script
wp_localize_script(
'bd-murphy-navigation',
'bdMurphyScreenReaderText',
array(
'expand' => esc_html__('Expand child menu', 'bd-bookshelf'),
'collapse' => esc_html__('Collapse child menu', 'bd-bookshelf'),
)
);
// Comment reply script
if (is_singular() && comments_open()) {
wp_enqueue_script('comment-reply');
}
}
add_action('wp_enqueue_scripts', 'bdm_enqueue_scripts');
/**
* Enqueue admin styles
*/
function bdm_enqueue_admin_styles($hook) {
wp_enqueue_style(
'bd-murphy-admin-style',
BDM_URI . '/assets/css/admin-style.css',
array(),
BDM_VERSION
);
}
add_action('admin_enqueue_scripts', 'bdm_enqueue_admin_styles');
/**
* Output Customizer CSS
*/
function bdm_output_customizer_css() {
$primary_color = get_theme_mod('primary_color', '#1B3A6B');
$accent_color = get_theme_mod('accent_color', '#C8A96E');
$cream_color = get_theme_mod('background_color', 'F5F0E8');
$heading_font = get_theme_mod('heading_font', 'Playfair Display');
$body_font = get_theme_mod('body_font', 'Lato');
// Calculate derived colors
$slate_blue = bdm_adjust_color($primary_color, 30);
$sky_blue = bdm_adjust_color($primary_color, 80);
printf(
'',
":root {
--bdm-navy: {$primary_color};
--bdm-slate: {$slate_blue};
--bdm-sky: {$sky_blue};
--bdm-gold: {$accent_color};
--bdm-cream: #{$cream_color};
--bdm-parchment: #EDE4D0;
--bdm-body-text: #2C2C2C;
--bdm-mid-grey: #555555;
--bdm-light-grey: #888888;
--bdm-active-green: #2D6A4F;
--bdm-heading-font: {$heading_font}, Georgia, serif;
--bdm-body-font: {$body_font}, Calibri, sans-serif;
}" . "\n"
);
}
add_action('wp_head', 'bdm_output_customizer_css', 99);
/**
* Adjust color brightness
*
* @param string $hex Hex color code.
* @param int $percent Percent to adjust (-255 to 255).
* @return string
*/
function bdm_adjust_color($hex, $percent) {
$hex = ltrim($hex, '#');
if (strlen($hex) === 3) {
$hex = $hex[0] . $hex[0] . $hex[1] . $hex[1] . $hex[2] . $hex[2];
}
$r = hexdec(substr($hex, 0, 2));
$g = hexdec(substr($hex, 2, 2));
$b = hexdec(substr($hex, 4, 2));
$r = min(255, max(0, $r + $percent));
$g = min(255, max(0, $g + $percent));
$b = min(255, max(0, $b + $percent));
return sprintf('#%02x%02x%02x', $r, $g, $b);
}
/**
* Fire bdm_post_published action on publish
*
* @param int $post_id Post ID.
*/
function bdm_publish_hook($post_id) {
do_action('bdm_post_published', $post_id);
}
add_action('publish_post', 'bdm_publish_hook');
/**
* RSS feed link in head
*/
function bdm_rss_feed_link() {
printf(
'' . "\n",
esc_attr(get_bloginfo('name')),
esc_url(get_bloginfo('rss2_url'))
);
}
add_action('wp_head', 'bdm_rss_feed_link');
/**
* Add custom body classes
*
* @param array $classes Body classes.
* @return array
*/
function bdm_body_classes($classes) {
// Adds class for sticky nav
if (get_theme_mod('sticky_nav', true)) {
$classes[] = 'has-sticky-nav';
}
return $classes;
}
add_filter('body_class', 'bdm_body_classes');
/**
* Content width
*/
if (!isset($content_width)) {
$content_width = 1200;
}
/**
* Set default Goodreads widget in home sidebar
*/
function bdm_default_home_sidebar_widgets() {
if (!is_admin()) {
return;
}
$sidebar_id = 'home-sidebar';
// Check if sidebar has any widgets
if (is_active_sidebar($sidebar_id)) {
return;
}
// Get the Goodreads widget settings
$widget_options = get_option('widget_bdm_goodreads_books', array());
// Find an available widget instance number
$instance_num = 1;
while (isset($widget_options[$instance_num])) {
$instance_num++;
}
// Create the widget instance
$widget_options[$instance_num] = array(
'title' => '',
);
// Update the option
update_option('widget_bdm_goodreads_books', $widget_options);
// Get current sidebars option
$sidebars = get_option('sidebars_widgets', array());
// Add widget to home sidebar
$widget_id = 'bdm_goodreads_books-' . $instance_num;
if (!isset($sidebars[$sidebar_id]) || !is_array($sidebars[$sidebar_id])) {
$sidebars[$sidebar_id] = array();
}
// Only add if not already present
if (!in_array($widget_id, $sidebars[$sidebar_id])) {
array_unshift($sidebars[$sidebar_id], $widget_id);
}
// Update sidebars
update_option('sidebars_widgets', $sidebars);
}
add_action('after_switch_theme', 'bdm_default_home_sidebar_widgets');
/**
* Register block styles
*/
function bdm_register_block_styles() {
register_block_style('core/image', array(
'name' => 'bd-bookshelf-rounded',
'label' => esc_html__('Rounded', 'bd-bookshelf'),
));
register_block_style('core/quote', array(
'name' => 'bd-bookshelf-pull-quote',
'label' => esc_html__('Pull Quote', 'bd-bookshelf'),
));
}
add_action('init', 'bdm_register_block_styles');
/**
* Register block patterns
*/
function bdm_register_block_patterns() {
register_block_pattern_category('bd-bookshelf', array(
'label' => esc_html__('BD Bookshelf', 'bd-bookshelf'),
));
}
add_action('init', 'bdm_register_block_patterns');
/**
* Add avatar support to comments
*
* @param array $args Comment form args.
* @return array
*/
function bdm_comment_form_defaults($args) {
$args['comment_field'] = '';
return $args;
}
add_filter('comment_form_defaults', 'bdm_comment_form_defaults');
/**
* Add rewrite rules for book detail pages
*/
function bdm_rewrite_rules() {
add_rewrite_rule(
'^book/([^/]+)/?$',
'index.php?book_slug=$matches[1]',
'top'
);
}
add_action('init', 'bdm_rewrite_rules');
/**
* Load book detail template for book_slug query var
*/
function bdm_template_include_book($template) {
if (get_query_var('book_slug')) {
$book_template = get_template_directory() . '/single-book.php';
if (file_exists($book_template)) {
return $book_template;
}
}
return $template;
}
add_filter('template_include', 'bdm_template_include_book');
/**
* Flush rewrite rules on theme activation
*/
function bdm_rewrite_flush() {
bdm_rewrite_rules();
flush_rewrite_rules();
}
add_action('after_switch_theme', 'bdm_rewrite_flush');