]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-content/themes/twentyseventeen/inc/template-tags.php
WordPress 4.7
[autoinstalls/wordpress.git] / wp-content / themes / twentyseventeen / inc / template-tags.php
diff --git a/wp-content/themes/twentyseventeen/inc/template-tags.php b/wp-content/themes/twentyseventeen/inc/template-tags.php
new file mode 100644 (file)
index 0000000..5367e60
--- /dev/null
@@ -0,0 +1,196 @@
+<?php
+/**
+ * Custom template tags for this theme
+ *
+ * Eventually, some of the functionality here could be replaced by core features.
+ *
+ * @package WordPress
+ * @subpackage Twenty_Seventeen
+ * @since 1.0
+ */
+
+if ( ! function_exists( 'twentyseventeen_posted_on' ) ) :
+/**
+ * Prints HTML with meta information for the current post-date/time and author.
+ */
+function twentyseventeen_posted_on() {
+
+       // Get the author name; wrap it in a link.
+       $byline = sprintf(
+               /* translators: %s: post author */
+               __( 'by %s', 'twentyseventeen' ),
+               '<span class="author vcard"><a class="url fn n" href="' . esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ) . '">' . get_the_author() . '</a></span>'
+       );
+
+       // Finally, let's write all of this to the page.
+       echo '<span class="posted-on">' . twentyseventeen_time_link() . '</span><span class="byline"> ' . $byline . '</span>';
+}
+endif;
+
+
+if ( ! function_exists( 'twentyseventeen_time_link' ) ) :
+/**
+ * Gets a nicely formatted string for the published date.
+ */
+function twentyseventeen_time_link() {
+       $time_string = '<time class="entry-date published updated" datetime="%1$s">%2$s</time>';
+       if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) {
+               $time_string = '<time class="entry-date published" datetime="%1$s">%2$s</time><time class="updated" datetime="%3$s">%4$s</time>';
+       }
+
+       $time_string = sprintf( $time_string,
+               get_the_date( DATE_W3C ),
+               get_the_date(),
+               get_the_modified_date( DATE_W3C ),
+               get_the_modified_date()
+       );
+
+       // Wrap the time string in a link, and preface it with 'Posted on'.
+       return sprintf(
+               /* translators: %s: post date */
+               __( '<span class="screen-reader-text">Posted on</span> %s', 'twentyseventeen' ),
+               '<a href="' . esc_url( get_permalink() ) . '" rel="bookmark">' . $time_string . '</a>'
+       );
+}
+endif;
+
+
+if ( ! function_exists( 'twentyseventeen_entry_footer' ) ) :
+/**
+ * Prints HTML with meta information for the categories, tags and comments.
+ */
+function twentyseventeen_entry_footer() {
+
+       /* translators: used between list items, there is a space after the comma */
+       $separate_meta = __( ', ', 'twentyseventeen' );
+
+       // Get Categories for posts.
+       $categories_list = get_the_category_list( $separate_meta );
+
+       // Get Tags for posts.
+       $tags_list = get_the_tag_list( '', $separate_meta );
+
+       // We don't want to output .entry-footer if it will be empty, so make sure its not.
+       if ( ( ( twentyseventeen_categorized_blog() && $categories_list ) || $tags_list ) || get_edit_post_link() ) {
+
+               echo '<footer class="entry-footer">';
+
+                       if ( 'post' === get_post_type() ) {
+                               if ( ( $categories_list && twentyseventeen_categorized_blog() ) || $tags_list ) {
+                                       echo '<span class="cat-tags-links">';
+
+                                               // Make sure there's more than one category before displaying.
+                                               if ( $categories_list && twentyseventeen_categorized_blog() ) {
+                                                       echo '<span class="cat-links">' . twentyseventeen_get_svg( array( 'icon' => 'folder-open' ) ) . '<span class="screen-reader-text">' . __( 'Categories', 'twentyseventeen' ) . '</span>' . $categories_list . '</span>';
+                                               }
+
+                                               if ( $tags_list ) {
+                                                       echo '<span class="tags-links">' . twentyseventeen_get_svg( array( 'icon' => 'hashtag' ) ) . '<span class="screen-reader-text">' . __( 'Tags', 'twentyseventeen' ) . '</span>' . $tags_list . '</span>';
+                                               }
+
+                                       echo '</span>';
+                               }
+                       }
+
+                       twentyseventeen_edit_link();
+
+               echo '</footer> <!-- .entry-footer -->';
+       }
+}
+endif;
+
+
+if ( ! function_exists( 'twentyseventeen_edit_link' ) ) :
+/**
+ * Returns an accessibility-friendly link to edit a post or page.
+ *
+ * This also gives us a little context about what exactly we're editing
+ * (post or page?) so that users understand a bit more where they are in terms
+ * of the template hierarchy and their content. Helpful when/if the single-page
+ * layout with multiple posts/pages shown gets confusing.
+ */
+function twentyseventeen_edit_link() {
+
+       $link = edit_post_link(
+               sprintf(
+                       /* translators: %s: Name of current post */
+                       __( 'Edit<span class="screen-reader-text"> "%s"</span>', 'twentyseventeen' ),
+                       get_the_title()
+               ),
+               '<span class="edit-link">',
+               '</span>'
+       );
+
+       return $link;
+}
+endif;
+
+/**
+ * Display a front page section.
+ *
+ * @param $partial WP_Customize_Partial Partial associated with a selective refresh request.
+ * @param $id integer Front page section to display.
+ */
+function twentyseventeen_front_page_section( $partial = null, $id = 0 ) {
+       if ( is_a( $partial, 'WP_Customize_Partial' ) ) {
+               // Find out the id and set it up during a selective refresh.
+               global $twentyseventeencounter;
+               $id = str_replace( 'panel_', '', $partial->id );
+               $twentyseventeencounter = $id;
+       }
+
+       global $post; // Modify the global post object before setting up post data.
+       if ( get_theme_mod( 'panel_' . $id ) ) {
+               global $post;
+               $post = get_post( get_theme_mod( 'panel_' . $id ) );
+               setup_postdata( $post );
+               set_query_var( 'panel', $id );
+
+               get_template_part( 'template-parts/page/content', 'front-page-panels' );
+
+               wp_reset_postdata();
+       } elseif ( is_customize_preview() ) {
+               // The output placeholder anchor.
+               echo '<article class="panel-placeholder panel twentyseventeen-panel twentyseventeen-panel' . $id . '" id="panel' . $id . '"><span class="twentyseventeen-panel-title">' . sprintf( __( 'Front Page Section %1$s Placeholder', 'twentyseventeen' ), $id ) . '</span></article>';
+       }
+}
+
+/**
+ * Returns true if a blog has more than 1 category.
+ *
+ * @return bool
+ */
+function twentyseventeen_categorized_blog() {
+       $category_count = get_transient( 'twentyseventeen_categories' );
+
+       if ( false === $category_count ) {
+               // Create an array of all the categories that are attached to posts.
+               $categories = 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.
+               $category_count = count( $categories );
+
+               set_transient( 'twentyseventeen_categories', $category_count );
+       }
+
+       return $category_count > 1;
+}
+
+
+/**
+ * Flush out the transients used in twentyseventeen_categorized_blog.
+ */
+function twentyseventeen_category_transient_flusher() {
+       if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
+               return;
+       }
+       // Like, beat it. Dig?
+       delete_transient( 'twentyseventeen_categories' );
+}
+add_action( 'edit_category', 'twentyseventeen_category_transient_flusher' );
+add_action( 'save_post',     'twentyseventeen_category_transient_flusher' );