%2$s'; $time_string = sprintf( $time_string, esc_attr( get_the_date( 'c' ) ), esc_html( get_the_date() ), esc_attr( get_the_modified_date( 'c' ) ), esc_html( get_the_modified_date() ) ); $posted_on = sprintf( /* translators: %s is the post date */ esc_html_x( '%s ', 'post date', 'jason-lite' ), '' . $time_string . '' ); echo '' . $posted_on . ''; // WPCS: XSS OK. if ( 'post' == get_post_type() ) { /* translators: used between list items, there is a space after the comma */ $categories_list = get_the_category_list( esc_html__( ', ', 'jason-lite' ) ); if ( $categories_list && jason_categorized_blog() ) { /* translators: %1$s for categories */ printf( '' . esc_html__( '%1$s ', 'jason-lite' ) . '', $categories_list ); // WPCS: XSS OK. } } if ( ! is_single() && ! post_password_required() && ( comments_open() || get_comments_number() ) ) { echo ''; comments_popup_link( esc_html__( 'Write a comment', 'jason-lite' ), esc_html__( '1 Comment', 'jason-lite' ), esc_html__( '% Comments', 'jason-lite' ) ); echo ''; } jason_post_views(); edit_post_link( esc_html__( 'Edit', 'jason-lite' ), '', '' ); } endif; if ( ! function_exists( 'jason_archive_posted_on' ) ) : /** * Prints HTML with meta information for the current post-date/time and author. */ function jason_archive_posted_on() { $time_string = ''; $time_string = sprintf( $time_string, esc_attr( get_the_date( 'c' ) ), esc_html( get_the_date() ), esc_attr( get_the_modified_date( 'c' ) ), esc_html( get_the_modified_date() ) ); $posted_on = sprintf( /* translators: %s posted date */ esc_html_x( '%s ', 'post date', 'jason-lite' ), '' . $time_string . '' ); echo '' . $posted_on . ''; // WPCS: XSS OK. if ( 'post' == get_post_type() ) { /* translators: used between list items, there is a space after the comma */ $categories_list = get_the_category_list( esc_html__( ', ', 'jason-lite' ) ); if ( $categories_list && jason_categorized_blog() ) { /* translators: %s post category */ printf( '' . esc_html__( '%1$s ', 'jason-lite' ) . '', $categories_list ); // WPCS: XSS OK. } } } endif; /** * Returns true if a blog has more than 1 category. * * @return bool */ function jason_categorized_blog() { if ( false === ( $all_the_cool_cats = get_transient( 'jason_categories' ) ) ) { // Create an array of all the categories that are attached to posts. $all_the_cool_cats = get_categories( array( 'fields' => 'ids', 'hide_empty' => 1, // We only need to know if there is more than one category. 'number' => 2, ) ); // Count the number of categories that are attached to the posts. $all_the_cool_cats = count( $all_the_cool_cats ); set_transient( 'jason_categories', $all_the_cool_cats ); } if ( $all_the_cool_cats > 1 ) { // This blog has more than 1 category so jason_categorized_blog should return true. return true; } else { // This blog has only 1 category so jason_categorized_blog should return false. return false; } } /** * Flush out the transients used in jason_categorized_blog. */ function jason_category_transient_flusher() { if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return; } // Like, beat it. Dig? delete_transient( 'jason_categories' ); } add_action( 'edit_category', 'jason_category_transient_flusher' ); add_action( 'save_post', 'jason_category_transient_flusher' ); if ( ! function_exists( 'jason_first_content_character' ) ) : /** * Returns the first UTF-8 character of the content * returns empty string if nothing found * * @param bool $data_attribute * * @return string */ function jason_first_content_character() { //no need for this when a password is required if ( post_password_required() ) { return; } $content = get_the_content(); // remove [caption] shortcode // because if it is the first part of the content we don't need the caption $content = trim( preg_replace( '/\[caption.*\[\/caption\]/si', '', $content ) ); //now apply the regular filters, without the captions $content = apply_filters( 'the_content', $content ); $content = strip_tags( html_entity_decode( $content ) ); $first_letter = ''; if ( ! empty( $content ) ) { //find the first alphanumeric character - multibyte preg_match( '/[\p{Xan}]/u', $content, $results ); if ( isset( $results ) && ! empty( $results[0] ) ) { $first_letter = $results[0]; } else { //lets try the old fashion way //find the first alphanumeric character - non-multibyte preg_match( '/[a-zA-Z\d]/', $content, $results ); if ( isset( $results ) && ! empty( $results[0] ) ) { $first_letter = $results[0]; } }; }; return $first_letter; } endif; if ( ! function_exists( 'jason_site_title' ) ) : /** * Display the site title in the header area, applying special processing depending on Customizer options */ function jason_site_title() { //get the original site title $site_title = get_bloginfo( 'name', 'display' ); //output sanitized site title echo wp_kses( $site_title, array() ); } endif; if ( ! function_exists( 'jason_site_title_classes') ) : /** * Display the class attribute for the site branding (site title and tagline) * * @param array $classes Classes for the site branding element. */ function jason_site_title_classes( $classes ) { //get the original site title $site_title = get_bloginfo( 'name', 'display' ); $site_title_length = mb_strlen( $site_title, 'UTF-8' ); //depending on the site title length we will make the site title smaller or bigger if ( $site_title_length < 8 ) { $classes[] = 'site-branding--size-large'; } elseif ( $site_title_length > 20 ) { $classes[] = 'site-branding--size-small'; } else { $classes[] = 'site-branding--size-medium'; } //make sure everything is in proper order, security wise $classes = array_map( 'esc_attr', $classes ); // Separates classes with a single space, collates classes for site branding echo 'class="' . join( ' ', $classes ) . '"'; } endif; if ( ! function_exists( 'jason_post_views' ) ) : /** * Display the number of post views using WP.com Stats from Jetpack * * @param $post_ID Optional. */ function jason_post_views( $post_ID = null ) { //bail if Jetpack is not present if ( ! function_exists( 'stats_get_csv' ) ) { return; } //use the current post ID if none given if ( empty( $post_ID ) ) { $post_ID = get_the_ID(); } //don't display views for pages if ( 'page' == get_post_type( $post_ID ) ) { return; } $args = array( 'days' => - 1, 'limit' => - 1, 'post_id' => $post_ID, ); $result = stats_get_csv( 'postviews', $args ); if ( ! empty( $result[0] ) && ! empty( $result[0]['views'] ) ) { $views = $result[0]['views']; printf( // WPCS: XSS OK. /* translators: %1$s %2$s for number of views */ '' . _nx( '%1$s view', '%2$s views', $views, 'post views', 'jason-lite' ) . '', number_format_i18n( $views ) ); } } endif; if ( ! function_exists( 'jason_the_image_navigation' ) ) : /** * Display navigation to next/previous image attachment */ function jason_the_image_navigation() { ?> 45, 'exclude' => '', 'include' => '', 'taxonomy' => 'post_tag', 'post_type' => '', ); $tags = get_terms( $args['taxonomy'], array_merge( $args, array( 'orderby' => 'count', 'order' => 'DESC' ) ) ); // Always query top tags if ( empty( $tags ) || is_wp_error( $tags ) ) return; foreach ( $tags as $key => $tag ) { $link = get_term_link( intval($tag->term_id), $tag->taxonomy ); if ( is_wp_error( $link ) ) return; $tags[ $key ]->link = $link; $tags[ $key ]->id = $tag->term_id; } //now display the HTML markup ?>