200, 'width' => 600, 'flex-height' => true, 'flex-width' => true, 'header-text' => array( 'site-title', 'site-description' ), ) ); // Title tag add_theme_support( 'title-tag' ); // Add nav menu register_nav_menu( 'primary-menu', __( 'Primary Menu', 'koji' ) ); register_nav_menu( 'mobile-menu', __( 'Mobile Menu', 'koji' ) ); register_nav_menu( 'social', __( 'Social Menu', 'koji' ) ); // HTML5 semantic markup add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption' ) ); // Make the theme translation ready load_theme_textdomain( 'koji', get_template_directory() . '/languages' ); } add_action( 'after_setup_theme', 'koji_setup' ); endif; /* ----------------------------------------------------------------------------------------------- REQUIRED FILES Include required files --------------------------------------------------------------------------------------------------- */ // Handle Customizer settings require get_template_directory() . '/inc/classes/class-koji-customize.php'; /* --------------------------------------------------------------------------------------------- ENQUEUE STYLES --------------------------------------------------------------------------------------------- */ if ( ! function_exists( 'koji_load_style' ) ) : function koji_load_style() { if ( is_admin() ) return; wp_enqueue_style( 'koji-style', get_template_directory_uri() . '/style.css', array(), wp_get_theme( 'koji' )->get( 'Version' ) ); } add_action( 'wp_enqueue_scripts', 'koji_load_style' ); endif; /* --------------------------------------------------------------------------------------------- ADD EDITOR STYLES --------------------------------------------------------------------------------------------- */ if ( ! function_exists( 'koji_add_editor_styles' ) ) : function koji_add_editor_styles() { add_editor_style( array( '/assets/css/koji-classic-editor-styles.css', ) ); } add_action( 'init', 'koji_add_editor_styles' ); endif; /* --------------------------------------------------------------------------------------------- ENQUEUE SCRIPTS --------------------------------------------------------------------------------------------- */ if ( ! function_exists( 'koji_enqueue_scripts' ) ) : function koji_enqueue_scripts() { wp_enqueue_script( 'koji_construct', get_template_directory_uri() . '/assets/js/construct.js', array( 'jquery', 'imagesloaded', 'masonry' ), wp_get_theme( 'koji' )->get( 'Version' ), true ); if ( ( ! is_admin() ) && is_singular() && comments_open() && get_option( 'thread_comments' ) ) { wp_enqueue_script( 'comment-reply' ); } $ajax_url = admin_url( 'admin-ajax.php' ); // AJAX Load More wp_localize_script( 'koji_construct', 'koji_ajax_load_more', array( 'ajaxurl' => esc_url( $ajax_url ), ) ); } add_action( 'wp_enqueue_scripts', 'koji_enqueue_scripts' ); endif; /* --------------------------------------------------------------------------------------------- POST CLASSES --------------------------------------------------------------------------------------------- */ if ( ! function_exists( 'koji_post_classes' ) ) : function koji_post_classes( $classes ) { global $post; // Class indicating presence/lack of post thumbnail $classes[] = ( has_post_thumbnail() ? 'has-thumbnail' : 'missing-thumbnail' ); return $classes; } add_action( 'post_class', 'koji_post_classes' ); endif; /* --------------------------------------------------------------------------------------------- BODY CLASSES --------------------------------------------------------------------------------------------- */ if ( ! function_exists( 'koji_body_classes' ) ) : function koji_body_classes( $classes ) { global $post; // Determine type of infinite scroll $pagination_type = get_theme_mod( 'koji_pagination_type' ) ? get_theme_mod( 'koji_pagination_type' ) : 'button'; switch ( $pagination_type ) { case 'button' : $classes[] = 'pagination-type-button'; break; case 'scroll' : $classes[] = 'pagination-type-scroll'; break; case 'links' : $classes[] = 'pagination-type-links'; break; } // Check for post thumbnail if ( is_singular() && has_post_thumbnail() ) { $classes[] = 'has-post-thumbnail'; } elseif ( is_singular() ) { $classes[] = 'missing-post-thumbnail'; } // Check whether we're in the customizer preview if ( is_customize_preview() ) { $classes[] = 'customizer-preview'; } // Slim page template class names (class = name - file suffix) if ( is_page_template() ) { $classes[] = preg_replace( '/\\.[^.\\s]{3,4}$/', '', get_page_template_slug( $post->ID ) ); } return $classes; } add_action( 'body_class', 'koji_body_classes' ); endif; /* --------------------------------------------------------------------------------------------- ADD HTML CLASS IF THERE'S JAVASCRIPT --------------------------------------------------------------------------------------------- */ if ( ! function_exists( 'koji_has_js' ) ) : function koji_has_js() { ?> <?php echo esc_attr( $logo_alt_text ); ?> __( 'Sidebar', 'koji' ), 'id' => 'sidebar', 'description' => __( 'Widgets in this area will be shown below the main menu.', 'koji' ), 'before_title' => '

', 'after_title' => '

', 'before_widget' => '
', 'after_widget' => '
', ) ); register_sidebar( array( 'name' => __( 'Footer #1', 'koji' ), 'id' => 'footer-one', 'description' => __( 'Widgets in this area will be shown in the first footer column.', 'koji' ), 'before_title' => '

', 'after_title' => '

', 'before_widget' => '
', 'after_widget' => '
', ) ); register_sidebar( array( 'name' => __( 'Footer #2', 'koji' ), 'id' => 'footer-two', 'description' => __( 'Widgets in this area will be shown in the second footer column.', 'koji' ), 'before_title' => '

', 'after_title' => '

', 'before_widget' => '
', 'after_widget' => '
', ) ); register_sidebar( array( 'name' => __( 'Footer #3', 'koji' ), 'id' => 'footer-three', 'description' => __( 'Widgets in this area will be shown in the third footer column.', 'koji' ), 'before_title' => '

', 'after_title' => '

', 'before_widget' => '
', 'after_widget' => '
', ) ); } add_action( 'widgets_init', 'koji_widget_areas' ); endif; /* --------------------------------------------------------------------------------------------- REMOVE ARCHIVE PREFIXES --------------------------------------------------------------------------------------------- */ if ( ! function_exists( 'koji_remove_archive_title_prefix' ) ) : function koji_remove_archive_title_prefix( $title ) { if ( is_category() ) { $title = single_cat_title( '', false ); } elseif ( is_tag() ) { $title = single_tag_title( '', false ); } elseif ( is_author() ) { $title = '' . get_the_author() . ''; } elseif ( is_year() ) { $title = get_the_date( 'Y' ); } elseif ( is_month() ) { $title = get_the_date( 'F Y' ); } elseif ( is_day() ) { $title = get_the_date( get_option( 'date_format' ) ); } elseif ( is_tax( 'post_format' ) ) { if ( is_tax( 'post_format', 'post-format-aside' ) ) { $title = _x( 'Asides', 'post format archive title', 'koji' ); } elseif ( is_tax( 'post_format', 'post-format-gallery' ) ) { $title = _x( 'Galleries', 'post format archive title', 'koji' ); } elseif ( is_tax( 'post_format', 'post-format-image' ) ) { $title = _x( 'Images', 'post format archive title', 'koji' ); } elseif ( is_tax( 'post_format', 'post-format-video' ) ) { $title = _x( 'Videos', 'post format archive title', 'koji' ); } elseif ( is_tax( 'post_format', 'post-format-quote' ) ) { $title = _x( 'Quotes', 'post format archive title', 'koji' ); } elseif ( is_tax( 'post_format', 'post-format-link' ) ) { $title = _x( 'Links', 'post format archive title', 'koji' ); } elseif ( is_tax( 'post_format', 'post-format-status' ) ) { $title = _x( 'Statuses', 'post format archive title', 'koji' ); } elseif ( is_tax( 'post_format', 'post-format-audio' ) ) { $title = _x( 'Audio', 'post format archive title', 'koji' ); } elseif ( is_tax( 'post_format', 'post-format-chat' ) ) { $title = _x( 'Chats', 'post format archive title', 'koji' ); } } elseif ( is_post_type_archive() ) { $title = post_type_archive_title( '', false ); } elseif ( is_tax() ) { $title = single_term_title( '', false ); } elseif ( is_search() ) { $title = '“' . get_search_query() . '”'; } else { $title = __( 'Archives', 'koji' ); } // End if(). return $title; } add_filter( 'get_the_archive_title', 'koji_remove_archive_title_prefix' ); endif; /* --------------------------------------------------------------------------------------------- GET ARCHIVE PREFIX --------------------------------------------------------------------------------------------- */ if ( ! function_exists( 'koji_get_archive_title_prefix' ) ) : function koji_get_archive_title_prefix() { if ( is_category() ) { $title_prefix = __( 'Category', 'koji' ); } elseif ( is_tag() ) { $title_prefix = __( 'Tag', 'koji' ); } elseif ( is_author() ) { $title_prefix = __( 'Author', 'koji' ); } elseif ( is_year() ) { $title_prefix = __( 'Year', 'koji' ); } elseif ( is_month() ) { $title_prefix = __( 'Month', 'koji' ); } elseif ( is_day() ) { $title_prefix = __( 'Day', 'koji' ); } elseif ( is_tax() ) { $tax = get_taxonomy( get_queried_object()->taxonomy ); $title_prefix = $tax->labels->singular_name; } elseif ( is_search() ) { $title_prefix = __( 'Search Results', 'koji' ); } else { $title_prefix = __( 'Archives', 'koji' ); } return $title_prefix; } endif; /* --------------------------------------------------------------------------------------------- GET FALLBACK IMAGE --------------------------------------------------------------------------------------------- */ if ( ! function_exists( 'koji_get_fallback_image_url' ) ) : function koji_get_fallback_image_url() { $disable_fallback_image = get_theme_mod( 'koji_disable_fallback_image' ); if ( $disable_fallback_image ) { return ''; } $fallback_image_id = get_theme_mod( 'koji_fallback_image' ); if ( $fallback_image_id ) { $fallback_image = wp_get_attachment_image_src( $fallback_image_id, 'full' ); } $fallback_image_url = isset( $fallback_image ) ? esc_url( $fallback_image[0] ) : get_template_directory_uri() . '/assets/images/default-fallback-image.png'; return $fallback_image_url; } endif; /* --------------------------------------------------------------------------------------------- OUTPUT FALLBACK IMAGE --------------------------------------------------------------------------------------------- */ if ( ! function_exists( 'koji_the_fallback_image' ) ) : function koji_the_fallback_image() { $fallback_image_url = koji_get_fallback_image_url(); if ( ! $fallback_image_url ) { return; } echo '' . __( 'Fallback image', 'koji' ) . ''; } endif; /* --------------------------------------------------------------------------------------------- GET THE IMAGE SIZE OF PREVIEWS --------------------------------------------------------------------------------------------- */ if ( ! function_exists( 'koji_get_preview_image_size' ) ) : function koji_get_preview_image_size() { // Check if low-resolution images are activated in the customizer $low_res_images = get_theme_mod( 'koji_activate_low_resolution_images' ); // If they are, we're using the low resolution image size if ( $low_res_images ) { return 'koji_preview_image_low_resolution'; // If not, we're using the high resolution image size } else { return 'koji_preview_image_high_resolution'; } } endif; /* --------------------------------------------------------------------------------------------- OUTPUT POST META If it's a single post, output the post meta values specified in the Customizer settings. @param $post_id int The ID of the post for which the post meta should be output @param $location string Which post meta location to output – single or preview --------------------------------------------------------------------------------------------- */ if ( ! function_exists( 'koji_the_post_meta' ) ) : function koji_the_post_meta( $post_id = null, $location = 'single' ) { echo koji_get_post_meta( $post_id, $location ); } endif; /* --------------------------------------------------------------------------------------------- GET THE POST META If the provided ID is for a single post, return the post meta values specified in the Customizer settings. @param $post_id int The ID of the post for which the post meta should be output @param $location string Which post meta location to output – single or preview --------------------------------------------------------------------------------------------- */ if ( ! function_exists( 'koji_get_post_meta' ) ) : function koji_get_post_meta( $post_id = null, $location = 'single' ) { // Require post ID if ( ! $post_id ) { return; } // Check that the post type should be able to output post meta $allowed_post_types = apply_filters( 'koji_allowed_post_types_for_meta_output', array( 'post' ) ); if ( ! in_array( get_post_type( $post_id ), $allowed_post_types ) ) { return; } $post_meta_wrapper_classes = ''; $post_meta_classes = ''; // Get the post meta settings for the location specified if ( 'preview' === $location ) { $post_meta = get_theme_mod( 'koji_post_meta_preview' ); $post_meta_wrapper_classes = ' post-meta-preview'; // Empty = use default if ( ! $post_meta ) { $post_meta = array( 'post-date', 'comments', ); } } else { $post_meta = get_theme_mod( 'koji_post_meta_single' ); $post_meta_wrapper_classes = ' post-meta-single'; $post_meta_classes = ' stack-mobile'; // Empty = use default if ( ! $post_meta ) { $post_meta = array( 'post-date', 'categories', ); } } // If the post meta setting has the value 'empty', it's explicitly empty and the default post meta shouldn't be output if ( $post_meta && ! in_array( 'empty', $post_meta ) ) : ob_start(); setup_postdata( $post_id ); ?>
choices ) ) : return; endif; if ( ! empty( $this->label ) ) : ?> label ); ?> description ) ) : ?> description ); ?> value() ) ? explode( ',', $this->value() ) : $this->value(); ?> link(); ?> value="" /> user_id ) ) return $comment_text; $comment_author_user_id = $comment->user_id; $post_author_user_id = get_post_field( 'post_author', $comment->comment_post_ID ); if ( $comment_author_user_id === $post_author_user_id ) { $comment_text .= '
' . __( 'Post author', 'koji' ) . '
'; } return $comment_text; } add_filter( 'comment_text', 'koji_filter_comment_text', 10, 3 ); endif; /* --------------------------------------------------------------------------------------------- OUTPUT LOADING INDICATOR ------------------------------------------------------------------------------------------------ */ if ( ! function_exists( 'koji_loading_indicator' ) ) : function koji_loading_indicator() { echo '
'; } endif; /* --------------------------------------------------------------------------------------------- AJAX LOAD MORE Called in construct.js when the user has clicked the load more button --------------------------------------------------------------------------------------------- */ if ( ! function_exists( 'koji_ajax_load_more' ) ) : function koji_ajax_load_more() { $query_args = json_decode( wp_unslash( $_POST['json_data'] ), true ); $ajax_query = new WP_Query( $query_args ); // Determine which preview to use based on the post_type $post_type = $ajax_query->get( 'post_type' ); // Default to the "post" post type for previews if ( is_array( $post_type ) ) { $post_type = 'post'; } if ( $ajax_query->have_posts() ) : while ( $ajax_query->have_posts() ) : $ajax_query->the_post(); get_template_part( 'preview', $post_type ); endwhile; endif; die(); } add_action( 'wp_ajax_nopriv_koji_ajax_load_more', 'koji_ajax_load_more' ); add_action( 'wp_ajax_koji_ajax_load_more', 'koji_ajax_load_more' ); endif; /* --------------------------------------------------------------------------------------------- SPECIFY GUTENBERG SUPPORT ------------------------------------------------------------------------------------------------ */ if ( ! function_exists( 'koji_add_gutenberg_features' ) ) : function koji_add_gutenberg_features() { /* Gutenberg Feature Opt-Ins --------------------------------------- */ add_theme_support( 'align-wide' ); /* Gutenberg Palette --------------------------------------- */ add_theme_support( 'editor-color-palette', array( array( 'name' => _x( 'Black', 'Name of the black color in the Gutenberg palette', 'koji' ), 'slug' => 'black', 'color' => '#232D37', ), array( 'name' => _x( 'Darkest gray', 'Name of the darkest gray color in the Gutenberg palette', 'koji' ), 'slug' => 'darkest-gray', 'color' => '#4B555F', ), array( 'name' => _x( 'Darker Gray', 'Name of the darker gray color in the Gutenberg palette', 'koji' ), 'slug' => 'darker-gray', 'color' => '#69737D', ), array( 'name' => _x( 'Gray', 'Name of the gray color in the Gutenberg palette', 'koji' ), 'slug' => 'gray', 'color' => '#9BA5AF', ), array( 'name' => _x( 'Light gray', 'Name of the light gray color in the Gutenberg palette', 'koji' ), 'slug' => 'light-gray', 'color' => '#DCDFE2', ), array( 'name' => _x( 'Lightest gray', 'Name of the lightest gray color in the Gutenberg palette', 'koji' ), 'slug' => 'lightest-gray', 'color' => '#E6E9EC', ), array( 'name' => _x( 'White', 'Name of the white color in the Gutenberg palette', 'koji' ), 'slug' => 'white', 'color' => '#FFF', ), ) ); /* Gutenberg Font Sizes --------------------------------------- */ add_theme_support( 'editor-font-sizes', array( array( 'name' => _x( 'Small', 'Name of the small font size in Gutenberg', 'koji' ), 'shortName' => _x( 'S', 'Short name of the small font size in the Gutenberg editor.', 'koji' ), 'size' => 16, 'slug' => 'small', ), array( 'name' => _x( 'Normal', 'Name of the regular font size in Gutenberg', 'koji' ), 'shortName' => _x( 'N', 'Short name of the regular font size in the Gutenberg editor.', 'koji' ), 'size' => 19, 'slug' => 'normal', ), array( 'name' => _x( 'Large', 'Name of the large font size in Gutenberg', 'koji' ), 'shortName' => _x( 'L', 'Short name of the large font size in the Gutenberg editor.', 'koji' ), 'size' => 24, 'slug' => 'large', ), array( 'name' => _x( 'Larger', 'Name of the larger font size in Gutenberg', 'koji' ), 'shortName' => _x( 'XL', 'Short name of the larger font size in the Gutenberg editor.', 'koji' ), 'size' => 32, 'slug' => 'larger', ), ) ); } add_action( 'after_setup_theme', 'koji_add_gutenberg_features' ); endif; /* --------------------------------------------------------------------------------------------- GUTENBERG EDITOR STYLES --------------------------------------------------------------------------------------------- */ if ( ! function_exists( 'koji_block_editor_styles' ) ) : function koji_block_editor_styles() { wp_enqueue_style( 'koji-block-editor-styles', get_template_directory_uri() . '/assets/css/koji-block-editor-styles.css', array(), '1.0', 'all' ); } add_action( 'enqueue_block_editor_assets', 'koji_block_editor_styles', 1 ); endif;