2023-01-21 01:31:34 +01:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Template Part: Header
|
|
|
|
*
|
|
|
|
* Starts the document. The HTML root <html> is used to store default settings and
|
|
|
|
* configuration classes since it is the only node available at the beginning.
|
|
|
|
* This is necessary for the light/dark switch and site settings to work without
|
|
|
|
* causing color flickering or layout shifts.
|
|
|
|
*
|
|
|
|
* @package WordPress
|
|
|
|
* @subpackage Fictioneer
|
|
|
|
* @since 3.0
|
|
|
|
* @see wp_head()
|
|
|
|
* @see wp_body_open()
|
|
|
|
* @see fictioneer_output_head_meta()
|
|
|
|
* @see fictioneer_output_head_critical_scripts()
|
|
|
|
*
|
2023-08-20 01:04:49 +02:00
|
|
|
* @internal $args Array of arguments passed to the template.
|
2023-01-21 01:31:34 +01:00
|
|
|
*/
|
|
|
|
|
2023-08-03 17:02:46 +02:00
|
|
|
|
2023-08-27 22:03:18 +02:00
|
|
|
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
|
|
|
|
global $fictioneer_render_start_time;
|
|
|
|
$fictioneer_render_start_time = microtime( true );
|
|
|
|
}
|
|
|
|
|
2024-05-17 10:42:44 +02:00
|
|
|
// IDs
|
2023-08-03 17:02:46 +02:00
|
|
|
global $post;
|
|
|
|
|
2023-08-04 00:54:41 +02:00
|
|
|
$page_id = get_queried_object_id();
|
2023-08-03 19:55:33 +02:00
|
|
|
$post_id = $post ? $post->ID : null;
|
2024-10-13 01:49:50 +02:00
|
|
|
$story_id = null;
|
2023-08-03 17:02:46 +02:00
|
|
|
|
2023-08-04 00:54:41 +02:00
|
|
|
if ( $page_id != $post_id ) {
|
|
|
|
$post_id = $page_id;
|
|
|
|
}
|
|
|
|
|
2024-05-16 20:35:05 +02:00
|
|
|
if ( is_archive() || is_search() || is_404() || FICTIONEER_MU_REGISTRATION ) {
|
2023-08-03 19:55:33 +02:00
|
|
|
$post_id = null;
|
2023-08-03 17:02:46 +02:00
|
|
|
}
|
|
|
|
|
2024-05-17 10:32:48 +02:00
|
|
|
// Prevent indexing if required
|
|
|
|
if ( ( $args['no_index'] ?? 0 ) || FICTIONEER_MU_REGISTRATION ) {
|
|
|
|
add_filter( 'wp_robots', 'wp_robots_no_robots' );
|
|
|
|
}
|
|
|
|
|
2024-10-13 01:49:50 +02:00
|
|
|
// Setup
|
|
|
|
$story_id = null;
|
|
|
|
$post_type = $post_id ? $post->post_type : null;
|
|
|
|
$header_image_source = 'default';
|
|
|
|
$header_image_url = get_header_image();
|
|
|
|
|
|
|
|
// If this is a content page...
|
|
|
|
if ( $post_id ) {
|
|
|
|
// Type?
|
|
|
|
switch ( $post_type ) {
|
|
|
|
case 'fcn_story':
|
|
|
|
$story_id = $post_id;
|
|
|
|
break;
|
|
|
|
case 'fcn_chapter':
|
|
|
|
$story_id = get_post_meta( get_the_ID(), 'fictioneer_chapter_story', true );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Custom header image?
|
|
|
|
if ( get_post_meta( $post_id, 'fictioneer_custom_header_image', true ) ) {
|
|
|
|
$header_image_url = get_post_meta( $post_id, 'fictioneer_custom_header_image', true );
|
|
|
|
$header_image_url = wp_get_attachment_image_url( $header_image_url, 'full' );
|
|
|
|
$header_image_source = 'post';
|
|
|
|
} elseif ( ! empty( $story_id ) && get_post_meta( $story_id, 'fictioneer_custom_header_image', true ) ) {
|
|
|
|
$header_image_url = get_post_meta( $story_id, 'fictioneer_custom_header_image', true );
|
|
|
|
$header_image_url = wp_get_attachment_image_url( $header_image_url, 'full' );
|
|
|
|
$header_image_source = 'story';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Filter header image
|
|
|
|
if ( ! empty( $post_id ) && $header_image_url ) {
|
|
|
|
$header_image_url = apply_filters( 'fictioneer_filter_header_image', $header_image_url, $post_id );
|
|
|
|
}
|
|
|
|
|
|
|
|
// Action arguments
|
|
|
|
$action_args = array(
|
|
|
|
'post_id' => $post_id,
|
|
|
|
'post_type' => $post_type,
|
|
|
|
'story_id' => $story_id,
|
|
|
|
'header_image_url' => $header_image_url,
|
|
|
|
'header_image_source' => $header_image_source,
|
|
|
|
'header_args' => $args ?? []
|
|
|
|
);
|
|
|
|
|
|
|
|
// Body attributes
|
|
|
|
$body_attributes = array(
|
|
|
|
'data-post-id' => ( $post_id ?: -1 )
|
|
|
|
);
|
|
|
|
|
|
|
|
if ( $story_id ) {
|
|
|
|
$body_attributes['data-story-id'] = $story_id;
|
|
|
|
}
|
|
|
|
|
2024-10-13 10:14:34 +02:00
|
|
|
$body_attributes = apply_filters( 'fictioneer_filter_body_attributes', $body_attributes, $action_args );
|
|
|
|
unset( $body_attributes['class'] ); // Prevent mistakes
|
|
|
|
|
2024-10-13 01:49:50 +02:00
|
|
|
$body_attributes = array_map(
|
|
|
|
function ( $key, $value ) { return $key . '="' . esc_attr( $value ) . '"'; },
|
|
|
|
array_keys( $body_attributes ),
|
|
|
|
$body_attributes
|
|
|
|
);
|
|
|
|
|
2023-08-03 17:02:46 +02:00
|
|
|
?>
|
|
|
|
|
2023-01-21 01:31:34 +01:00
|
|
|
<!doctype html>
|
|
|
|
|
|
|
|
<html <?php language_attributes(); ?> <?php fictioneer_root_attributes(); ?>>
|
|
|
|
|
2024-05-17 10:42:44 +02:00
|
|
|
<head><?php wp_head(); ?></head>
|
2023-01-21 01:31:34 +01:00
|
|
|
|
2024-10-13 01:49:50 +02:00
|
|
|
<body <?php body_class( 'site-bg scrolled-to-top' ); echo implode( ' ', $body_attributes ); ?>>
|
2023-01-21 01:31:34 +01:00
|
|
|
<?php
|
2024-10-13 01:49:50 +02:00
|
|
|
// WP Default action
|
|
|
|
wp_body_open();
|
2023-01-21 01:31:34 +01:00
|
|
|
|
2023-06-08 21:30:25 +02:00
|
|
|
// Includes mobile menu
|
2023-01-21 01:31:34 +01:00
|
|
|
do_action( 'fictioneer_body', $action_args );
|
|
|
|
?>
|
|
|
|
|
|
|
|
<div id="notifications" class="notifications"></div>
|
|
|
|
|
|
|
|
<div id="site" class="site background-texture">
|
|
|
|
|
|
|
|
<?php
|
|
|
|
// Includes header background, navigation bar, and site header (with title, logo, etc.)
|
|
|
|
do_action( 'fictioneer_site', $action_args );
|
|
|
|
?>
|