__( 'Main Menu', 'esquire' ), ) ); /** * Enable Post Formats */ add_theme_support( 'post-formats', array( 'aside', 'gallery', 'image', 'quote', 'link', 'audio', 'video' ) ); /** * Sniff out the number of categories in use and return the number of categories */ function esquire_category_counter() { if ( false === ( $all_the_cool_cats = get_transient( 'all_the_cool_cats' ) ) ) { // Create an array of all the categories that are attached to posts $all_the_cool_cats = get_categories( array( 'hide_empty' => 1, ) ); // Count the number of categories that are attached to the posts $all_the_cool_cats = count( $all_the_cool_cats ); set_transient( 'all_the_cool_cats', $all_the_cool_cats ); } return $all_the_cool_cats; } /** * Flush out the transients used in esquire_category_counter */ function esquire_category_transient_flusher() { // Like, beat it. Dig? delete_transient( 'all_the_cool_cats' ); } add_action( 'edit_category', 'esquire_category_transient_flusher' ); add_action( 'save_post', 'esquire_category_transient_flusher' ); /** * Add a class to the Older Posts link */ function esquire_next_posts_link_attributes( $attr ) { $attr = 'rel="prev"'; return $attr; } add_filter( 'next_posts_link_attributes', 'esquire_next_posts_link_attributes' ); /** * Add a class to the Newer Posts link */ function esquire_previous_posts_link_attributes( $attr ) { $attr = 'rel="next"'; return $attr; } add_filter( 'previous_posts_link_attributes', 'esquire_previous_posts_link_attributes' ); /** * Sets the post excerpt length to 40 words. * * To override this length in a child theme, remove the filter and add your own * function tied to the excerpt_length filter hook. */ function esquire_excerpt_length( $length ) { return 40; } add_filter( 'excerpt_length', 'esquire_excerpt_length' ); /** * Returns a "Continue Reading" link for excerpts */ function esquire_continue_reading_link() { return ' ' .__( 'Continue reading ', 'esquire' ) . ''; } /** * Replaces "[...]" (appended to automatically generated excerpts) with an ellipsis and esquire_continue_reading_link(). * * To override this in a child theme, remove the filter and add your own * function tied to the excerpt_more filter hook. */ function esquire_auto_excerpt_more( $more ) { return ' …' . esquire_continue_reading_link(); } add_filter( 'excerpt_more', 'esquire_auto_excerpt_more' ); /** * Adds a pretty "Continue Reading" link to custom post excerpts. * * To override this link in a child theme, remove the filter and add your own * function tied to the get_the_excerpt filter hook. */ function esquire_custom_excerpt_more( $output ) { if ( has_excerpt() && ! is_attachment() ) { $output .= esquire_continue_reading_link(); } return $output; } add_filter( 'get_the_excerpt', 'esquire_custom_excerpt_more' ); /** * Register our footer widget area * * @since Basic Lines Theme 1.0 */ function esquire_widgets_init() { register_sidebar( array( 'name' => __( 'Footer', 'esquire' ), 'id' => 'sidebar-1', 'before_widget' => '", 'before_title' => '

', 'after_title' => '

', ) ); } add_action( 'widgets_init', 'esquire_widgets_init' ); /** * Template for comments and pingbacks. * Used as a callback by wp_list_comments() for displaying the comments. * * @since Basic Lines Theme 1.0 */ function esquire_comment( $comment, $args, $depth ) { $GLOBALS['comment'] = $comment; switch ( $comment->comment_type ) : case 'pingback' : case 'trackback' : ?>
  • ', '' ); ?>

  • id="li-comment-">
    said:', 'esquire' ), sprintf( '%s', get_comment_author_link() ), sprintf( '', esc_url( get_comment_link( $comment->comment_ID ) ), get_comment_time( 'c' ), /* translators: 1: date, 2: time */ sprintf( __( '%1$s at %2$s', 'esquire' ), get_comment_date(), get_comment_time() ) ) ); ?> ', '' ); ?>
    comment_approved == '0' ) : ?>
    __( 'Reply ', 'esquire' ), 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>
    ID, $content, '
    ', '
    ' ); if ( $first_image ) $content = preg_replace( WPCOM_THEMES_IMAGE_REPLACE_REGEX, $first_image, $content, 1 ); break; default: break; } return $content; } if ( ! is_admin() ) add_filter( 'the_content', 'esquire_the_content', 11 ); /** * Add extra markup to VideoPress embeds. * * @param string html Video content from VideoPress plugin. * @return string Updated content with extra markup. */ function esquire_video_embed_html( $html ) { $html = '
    ' . $html . '
    '; return $html; } /** * Add extra markup to auto-embedded videos. * * @param string html Content from the auto-embed plugin. * @param string url Link embedded in the post, used to determine if this is a video we want to filter. * @return string Updated content with extra markup. */ function esquire_check_video_embeds( $html, $url ) { if ( false !== ( strstr( $url, 'youtube' ) ) || false !== ( strstr( $url, 'vimeo' ) ) ) $html = esquire_video_embed_html( $html ); return $html; } // Add post thumbnail support for audio album art add_theme_support( 'post-thumbnails' ); add_image_size( 'audio', 207, 207, false ); // Add in-head JS block for audio post format function esquire_add_audio_support() { if ( ! is_singular() || ( is_singular() && 'audio' == get_post_format() ) ) { ?> ]*?href=[\'"](.+?)[\'"]/is', $the_content, $matches ) ) return false; return esc_url_raw( $matches[1] ); } // Define common regex lookup patterns if ( ! defined( 'WPCOM_THEMES_IMAGE_REGEX' ) ) define( 'WPCOM_THEMES_IMAGE_REGEX', '/()/i' ); if ( ! defined( 'WPCOM_THEMES_IMAGE_REPLACE_REGEX' ) ) define( 'WPCOM_THEMES_IMAGE_REPLACE_REGEX', '/\[caption.*\[\/caption\]|]+./' ); if ( ! defined( 'WPCOM_THEMES_VIDEO_REGEX' ) ) { // iframe: ]*+> define( 'WPCOM_THEMES_VIDEO_REGEX', '#(]*+>(?>[^<]*+(?><(?!/object>)[^<]*+)*)|]*+>(?:\s*)?)#i' ); } /** * Return the HTML output for first image found for a post. * * @param int post_id ID for parent post * @param string the_content * @param string before Optional before string * @param string after Optional after string * @return boolean|string HTML output or false if no match */ function wpcom_themes_image_grabber( $post_id, $the_content = '', $before = '', $after = '' ) { global $wpdb; $image_src = ''; if ( empty( $the_content ) ) $the_content = get_the_content(); $first_image = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'attachment' AND INSTR(post_mime_type, 'image') ORDER BY menu_order ASC LIMIT 0,1", (int) $post_id ) ); if ( ! empty( $first_image ) ) { // We have an attachment, so just use its data. $image_src = wp_get_attachment_image( $first_image, 'image' ); } else { // Try to get the image for the linked image (not attached) $output = preg_match( WPCOM_THEMES_IMAGE_REGEX, $the_content, $matches ); if ( isset( $matches[0] ) ) $image_src = $matches[0]; } if ( ! empty( $image_src ) ) { // Add wrapper markup, if specified if ( ! empty( $before ) ) $image_src = $before . $image_src; if ( ! empty( $after ) ) $image_src = $image_src . $after; return $image_src; } return false; } /** * Return the HTML output for the first video found for a post. * * @param string the_content * @param string before Optional before string * @param string after Optional after string * @return boolean|string HTML output or false if no match */ function wpcom_themes_video_grabber( $the_content = '', $before = '', $after = '' ) { $first_video = ''; if ( empty( $the_content ) ) $the_content = get_the_content(); // Try to get the markup for the first video in this post $output = preg_match( WPCOM_THEMES_VIDEO_REGEX, $the_content, $matches ); if ( isset( $matches[0] ) ) $first_video = $matches[0]; if ( ! empty( $first_video ) ) { // Add wrapper markup, if specified if ( ! empty( $before ) ) $first_video = $before . $first_video; if ( ! empty( $after ) ) $first_video = $first_video . $after; return $first_video; } return false; } /** * Return the first audio file found for a post. * * @param int post_id ID for parent post * @return boolean|string Path to audio file */ function wpcom_themes_audio_grabber( $post_id ) { global $wpdb; $first_audio = $wpdb->get_var( $wpdb->prepare( "SELECT guid FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'attachment' AND INSTR(post_mime_type, 'audio') ORDER BY menu_order ASC LIMIT 0,1", (int) $post_id ) ); if ( ! empty( $first_audio ) ) return $first_audio; return false; }