summaryrefslogtreecommitdiff
path: root/inc/blog
diff options
context:
space:
mode:
authorZach van Rijn <me@zv.io>2021-07-21 14:54:07 -0500
committerZach van Rijn <me@zv.io>2021-07-21 14:54:07 -0500
commit9d4123cee1867ee7199b06bdc92d40611f547ecc (patch)
tree6d864e2725242863afed1f8ba12d9c7a9bc63a69 /inc/blog
downloadblog-ng-9d4123cee1867ee7199b06bdc92d40611f547ecc.tar.gz
blog-ng-9d4123cee1867ee7199b06bdc92d40611f547ecc.tar.bz2
blog-ng-9d4123cee1867ee7199b06bdc92d40611f547ecc.tar.xz
blog-ng-9d4123cee1867ee7199b06bdc92d40611f547ecc.zip
Initial unmodified import from Astra (Version: 3.6.5) @ /wp-content/themes/astra/.
Diffstat (limited to 'inc/blog')
-rw-r--r--inc/blog/blog-config.php470
-rw-r--r--inc/blog/blog.php392
-rw-r--r--inc/blog/index.php9
-rw-r--r--inc/blog/single-blog.php277
4 files changed, 1148 insertions, 0 deletions
diff --git a/inc/blog/blog-config.php b/inc/blog/blog-config.php
new file mode 100644
index 0000000..40a5fc3
--- /dev/null
+++ b/inc/blog/blog-config.php
@@ -0,0 +1,470 @@
+<?php
+/**
+ * Blog Config File
+ * Common Functions for Blog and Single Blog
+ *
+ * @package Astra
+ */
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
+/**
+ * Common Functions for Blog and Single Blog
+ *
+ * @return post meta
+ */
+if ( ! function_exists( 'astra_get_post_meta' ) ) {
+
+ /**
+ * Post meta
+ *
+ * @param string $post_meta Post meta.
+ * @param string $separator Separator.
+ * @return string post meta markup.
+ */
+ function astra_get_post_meta( $post_meta, $separator = '/' ) {
+
+ $output_str = '';
+ $loop_count = 1;
+
+ $separator = apply_filters( 'astra_post_meta_separator', $separator );
+
+ foreach ( $post_meta as $meta_value ) {
+
+ switch ( $meta_value ) {
+
+ case 'author':
+ $author = get_the_author();
+ if ( ! empty( $author ) ) {
+ $output_str .= ( 1 != $loop_count && '' != $output_str ) ? ' ' . $separator . ' ' : '';
+ $output_str .= esc_html( astra_default_strings( 'string-blog-meta-author-by', false ) ) . astra_post_author();
+ }
+ break;
+
+ case 'date':
+ $output_str .= ( 1 != $loop_count && '' != $output_str ) ? ' ' . $separator . ' ' : '';
+ $output_str .= astra_post_date();
+ break;
+
+ case 'category':
+ $category = astra_post_categories();
+ if ( '' != $category ) {
+ $output_str .= ( 1 != $loop_count && '' != $output_str ) ? ' ' . $separator . ' ' : '';
+ $output_str .= $category;
+ }
+ break;
+
+ case 'tag':
+ $tags = astra_post_tags();
+ if ( '' != $tags ) {
+ $output_str .= ( 1 != $loop_count && '' != $output_str ) ? ' ' . $separator . ' ' : '';
+ $output_str .= $tags;
+ }
+ break;
+
+ case 'comments':
+ $comment = astra_post_comments();
+ if ( '' != $comment ) {
+ $output_str .= ( 1 != $loop_count && '' != $output_str ) ? ' ' . $separator . ' ' : '';
+ $output_str .= $comment;
+ }
+ break;
+ default:
+ $output_str = apply_filters( 'astra_meta_case_' . $meta_value, $output_str, $loop_count, $separator );
+
+ }
+
+ $loop_count ++;
+ }
+
+ return $output_str;
+ }
+}
+
+/**
+ * Function to get Date of Post
+ *
+ * @since 1.0.0
+ * @return html
+ */
+if ( ! function_exists( 'astra_post_date' ) ) {
+
+ /**
+ * Function to get Date of Post
+ *
+ * @return html Markup.
+ */
+ function astra_post_date() {
+
+ $output = '';
+ $format = apply_filters( 'astra_post_date_format', '' );
+ $time_string = esc_html( get_the_date( $format ) );
+ $modified_date = esc_html( get_the_modified_date( $format ) );
+ $posted_on = sprintf(
+ esc_html( '%s' ),
+ $time_string
+ );
+ $modified_on = sprintf(
+ esc_html( '%s' ),
+ $modified_date
+ );
+ $output .= '<span class="posted-on">';
+ $output .= '<span class="published" itemprop="datePublished"> ' . $posted_on . '</span>';
+ $output .= '<span class="updated" itemprop="dateModified"> ' . $modified_on . '</span>';
+ $output .= '</span>';
+ return apply_filters( 'astra_post_date', $output );
+ }
+}
+
+/**
+ * Function to get Author of Post
+ *
+ * @since 1.0.0
+ * @return html
+ */
+if ( ! function_exists( 'astra_post_author' ) ) {
+
+ /**
+ * Function to get Author of Post
+ *
+ * @param string $output_filter Filter string.
+ * @return html Markup.
+ */
+ function astra_post_author( $output_filter = '' ) {
+
+ ob_start();
+
+ echo '<span ';
+ echo astra_attr(
+ 'post-meta-author',
+ array(
+ 'class' => 'posted-by vcard author',
+ )
+ );
+ echo '>';
+ // Translators: Author Name. ?>
+ <a title="<?php printf( esc_attr__( 'View all posts by %1$s', 'astra' ), get_the_author() ); ?>"
+ href="<?php echo esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ); ?>" rel="author"
+ <?php
+ echo astra_attr(
+ 'author-url',
+ array(
+ 'class' => 'url fn n',
+ )
+ );
+ ?>
+ >
+ <span
+ <?php
+ echo astra_attr(
+ 'author-name',
+ array(
+ 'class' => 'author-name',
+ )
+ );
+ ?>
+ ><?php echo get_the_author(); ?></span>
+ </a>
+ </span>
+
+ <?php
+
+ $output = ob_get_clean();
+
+ return apply_filters( 'astra_post_author', $output, $output_filter );
+ }
+}
+
+/**
+ * Function to get Read More Link of Post
+ *
+ * @since 1.0.0
+ * @return html
+ */
+if ( ! function_exists( 'astra_post_link' ) ) {
+
+ /**
+ * Function to get Read More Link of Post
+ *
+ * @param string $output_filter Filter string.
+ * @return html Markup.
+ */
+ function astra_post_link( $output_filter = '' ) {
+
+ $enabled = apply_filters( 'astra_post_link_enabled', '__return_true' );
+ if ( ( is_admin() && ! wp_doing_ajax() ) || ! $enabled ) {
+ return $output_filter;
+ }
+
+ $read_more_text = apply_filters( 'astra_post_read_more', __( 'Read More &raquo;', 'astra' ) );
+ $read_more_classes = apply_filters( 'astra_post_read_more_class', array() );
+
+ $post_link = sprintf(
+ esc_html( '%s' ),
+ '<a class="' . esc_attr( implode( ' ', $read_more_classes ) ) . '" href="' . esc_url( get_permalink() ) . '"> ' . the_title( '<span class="screen-reader-text">', '</span>', false ) . ' ' . $read_more_text . '</a>'
+ );
+
+ $output = ' &hellip;<p class="read-more"> ' . $post_link . '</p>';
+
+ return apply_filters( 'astra_post_link', $output, $output_filter );
+ }
+}
+add_filter( 'excerpt_more', 'astra_post_link', 1 );
+
+/**
+ * Function to get Number of Comments of Post
+ *
+ * @since 1.0.0
+ * @return html
+ */
+if ( ! function_exists( 'astra_post_comments' ) ) {
+
+ /**
+ * Function to get Number of Comments of Post
+ *
+ * @param string $output_filter Output filter.
+ * @return html Markup.
+ */
+ function astra_post_comments( $output_filter = '' ) {
+
+ $output = '';
+
+ ob_start();
+ if ( ! post_password_required() && ( comments_open() || get_comments_number() ) ) {
+ ?>
+ <span class="comments-link">
+ <?php
+ /**
+ * Get Comment Link
+ *
+ * @see astra_default_strings()
+ */
+ comments_popup_link( astra_default_strings( 'string-blog-meta-leave-a-comment', false ), astra_default_strings( 'string-blog-meta-one-comment', false ), astra_default_strings( 'string-blog-meta-multiple-comment', false ) );
+ ?>
+ </span>
+
+ <?php
+ }
+
+ $output = ob_get_clean();
+
+ return apply_filters( 'astra_post_comments', $output, $output_filter );
+ }
+}
+
+/**
+ * Function to get Tags applied of Post
+ *
+ * @since 1.0.0
+ * @return html
+ */
+if ( ! function_exists( 'astra_post_tags' ) ) {
+
+ /**
+ * Function to get Tags applied of Post
+ *
+ * @param string $output_filter Output filter.
+ * @return html Markup.
+ */
+ function astra_post_tags( $output_filter = '' ) {
+
+ $output = '';
+
+ /* translators: used between list items, there is a space after the comma */
+ $tags_list = get_the_tag_list( '', __( ', ', 'astra' ) );
+
+ if ( $tags_list ) {
+ $output .= '<span class="tags-links">' . $tags_list . '</span>';
+ }
+
+ return apply_filters( 'astra_post_tags', $output, $output_filter );
+ }
+}
+
+/**
+ * Function to get Categories of Post
+ *
+ * @since 1.0.0
+ * @return html
+ */
+if ( ! function_exists( 'astra_post_categories' ) ) {
+
+ /**
+ * Function to get Categories applied of Post
+ *
+ * @param string $output_filter Output filter.
+ * @return html Markup.
+ */
+ function astra_post_categories( $output_filter = '' ) {
+
+ $output = '';
+
+ /* translators: used between list items, there is a space after the comma */
+ $categories_list = get_the_category_list( __( ', ', 'astra' ) );
+
+ if ( $categories_list ) {
+ $output .= '<span class="cat-links">' . $categories_list . '</span>';
+ }
+
+ return apply_filters( 'astra_post_categories', $output, $output_filter );
+ }
+}
+
+/**
+ * Display classes for primary div
+ *
+ * @since 1.0.0
+ */
+if ( ! function_exists( 'astra_blog_layout_class' ) ) {
+
+ /**
+ * Layout class
+ *
+ * @param string $class Class.
+ */
+ function astra_blog_layout_class( $class = '' ) {
+
+ // Separates classes with a single space, collates classes for body element.
+ echo 'class="' . esc_attr( join( ' ', astra_get_blog_layout_class( $class ) ) ) . '"';
+ }
+}
+
+/**
+ * Retrieve the classes for the body element as an array.
+ *
+ * @since 1.0.0
+ * @param string|array $class One or more classes to add to the class list.
+ * @return array Array of classes.
+ */
+if ( ! function_exists( 'astra_get_blog_layout_class' ) ) {
+
+ /**
+ * Retrieve the classes for the body element as an array.
+ *
+ * @param string $class Class.
+ */
+ function astra_get_blog_layout_class( $class = '' ) {
+
+ // array of class names.
+ $classes = array();
+
+ $post_format = get_post_format();
+ if ( $post_format ) {
+ $post_format = 'standard';
+ }
+
+ $classes[] = 'ast-post-format-' . $post_format;
+
+ if ( ! has_post_thumbnail() || ! wp_get_attachment_image_src( get_post_thumbnail_id() ) ) {
+ switch ( $post_format ) {
+
+ case 'aside':
+ $classes[] = 'ast-no-thumb';
+ break;
+
+ case 'image':
+ $has_image = astra_get_first_image_from_post();
+ if ( empty( $has_image ) || is_single() ) {
+ $classes[] = 'ast-no-thumb';
+ }
+ break;
+
+ case 'video':
+ $post_featured_data = astra_get_video_from_post( get_the_ID() );
+ if ( empty( $post_featured_data ) ) {
+ $classes[] = 'ast-no-thumb';
+ }
+ break;
+
+ case 'quote':
+ $classes[] = 'ast-no-thumb';
+ break;
+
+ case 'link':
+ $classes[] = 'ast-no-thumb';
+ break;
+
+ case 'gallery':
+ $post_featured_data = get_post_gallery();
+ if ( empty( $post_featured_data ) || is_single() ) {
+ $classes[] = 'ast-no-thumb';
+ }
+ break;
+
+ case 'audio':
+ $has_audio = astra_get_audios_from_post( get_the_ID() );
+ if ( empty( $has_audio ) || is_single() ) {
+ $classes[] = 'ast-no-thumb';
+ } else {
+ $classes[] = 'ast-embeded-audio';
+ }
+ break;
+
+ case 'standard':
+ default:
+ if ( ! has_post_thumbnail() || ! wp_get_attachment_image_src( get_post_thumbnail_id() ) ) {
+ $classes[] = 'ast-no-thumb';
+ }
+ break;
+ }
+ }
+
+ if ( ! empty( $class ) ) {
+ if ( ! is_array( $class ) ) {
+ $class = preg_split( '#\s+#', $class );
+ }
+ $classes = array_merge( $classes, $class );
+ } else {
+ // Ensure that we always coerce class to being an array.
+ $class = array();
+ }
+
+ /**
+ * Filter primary div class names
+ */
+ $classes = apply_filters( 'astra_blog_layout_class', $classes, $class );
+
+ $classes = array_map( 'sanitize_html_class', $classes );
+
+ return array_unique( $classes );
+ }
+}
+
+/**
+ * Function to get Content Read More Link of Post
+ *
+ * @since 1.2.7
+ * @return html
+ */
+if ( ! function_exists( 'astra_the_content_more_link' ) ) {
+
+ /**
+ * Filters the Read More link text.
+ *
+ * @param string $more_link_element Read More link element.
+ * @param string $more_link_text Read More text.
+ * @return html Markup.
+ */
+ function astra_the_content_more_link( $more_link_element = '', $more_link_text = '' ) {
+
+ $enabled = apply_filters( 'astra_the_content_more_link_enabled', '__return_true' );
+ if ( ( is_admin() && ! wp_doing_ajax() ) || ! $enabled ) {
+ return $more_link_element;
+ }
+
+ $more_link_text = apply_filters( 'astra_the_content_more_string', __( 'Read More &raquo;', 'astra' ) );
+ $read_more_classes = apply_filters( 'astra_the_content_more_link_class', array() );
+
+ $post_link = sprintf(
+ esc_html( '%s' ),
+ '<a class="' . esc_attr( implode( ' ', $read_more_classes ) ) . '" href="' . esc_url( get_permalink() ) . '"> ' . the_title( '<span class="screen-reader-text">', '</span>', false ) . $more_link_text . '</a>'
+ );
+
+ $more_link_element = ' &hellip;<p class="ast-the-content-more-link"> ' . $post_link . '</p>';
+
+ return apply_filters( 'astra_the_content_more_link', $more_link_element, $more_link_text );
+ }
+}
+add_filter( 'the_content_more_link', 'astra_the_content_more_link', 10, 2 );
diff --git a/inc/blog/blog.php b/inc/blog/blog.php
new file mode 100644
index 0000000..ac79ec4
--- /dev/null
+++ b/inc/blog/blog.php
@@ -0,0 +1,392 @@
+<?php
+/**
+ * Blog Helper Functions
+ *
+ * @package Astra
+ */
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
+/**
+ * Adds custom classes to the array of body classes.
+ */
+if ( ! function_exists( 'astra_blog_body_classes' ) ) {
+
+ /**
+ * Adds custom classes to the array of body classes.
+ *
+ * @since 1.0
+ * @param array $classes Classes for the body element.
+ * @return array
+ */
+ function astra_blog_body_classes( $classes ) {
+
+ // Adds a class of group-blog to blogs with more than 1 published author.
+ if ( is_multi_author() ) {
+ $classes[] = 'group-blog';
+ }
+
+ return $classes;
+ }
+}
+
+add_filter( 'body_class', 'astra_blog_body_classes' );
+
+/**
+ * Adds custom classes to the array of post grid classes.
+ */
+if ( ! function_exists( 'astra_post_class_blog_grid' ) ) {
+
+ /**
+ * Adds custom classes to the array of post grid classes.
+ *
+ * @since 1.0
+ * @param array $classes Classes for the post element.
+ * @return array
+ */
+ function astra_post_class_blog_grid( $classes ) {
+
+ if ( is_archive() || is_home() || is_search() ) {
+ $classes[] = astra_attr( 'ast-blog-col' );
+ $classes[] = 'ast-article-post';
+ }
+
+ return $classes;
+ }
+}
+
+add_filter( 'post_class', 'astra_post_class_blog_grid' );
+
+/**
+ * Prints HTML with meta information for the current post-date/time and author.
+ */
+if ( ! function_exists( 'astra_blog_get_post_meta' ) ) {
+
+ /**
+ * Prints HTML with meta information for the current post-date/time and author.
+ *
+ * @since 1.0
+ * @return mixed Markup.
+ */
+ function astra_blog_get_post_meta() {
+
+ $enable_meta = apply_filters( 'astra_blog_post_meta_enabled', '__return_true' );
+ $post_meta = astra_get_option( 'blog-meta' );
+ $current_post_type = get_post_type();
+ $post_type_array = apply_filters( 'astra_blog_archive_post_type_meta', array( 'post' ) );
+
+ if ( in_array( $current_post_type, $post_type_array ) && is_array( $post_meta ) && $enable_meta ) {
+
+ $output_str = astra_get_post_meta( $post_meta );
+
+ if ( ! empty( $output_str ) ) {
+ echo apply_filters( 'astra_blog_post_meta', '<div class="entry-meta">' . $output_str . '</div>', $output_str ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
+ }
+ }
+ }
+}
+
+/**
+ * Featured post meta.
+ */
+if ( ! function_exists( 'astra_blog_post_get_featured_item' ) ) {
+
+ /**
+ * To featured image / gallery / audio / video etc. As per the post format.
+ *
+ * @since 1.0
+ * @return mixed
+ */
+ function astra_blog_post_get_featured_item() {
+
+ $post_featured_data = '';
+ $post_format = get_post_format();
+
+ if ( has_post_thumbnail() ) {
+
+ $post_featured_data = '<a href="' . esc_url( get_permalink() ) . '" >';
+ $post_featured_data .= get_the_post_thumbnail();
+ $post_featured_data .= '</a>';
+
+ } else {
+
+ switch ( $post_format ) {
+ case 'image':
+ break;
+
+ case 'video':
+ $post_featured_data = astra_get_video_from_post( get_the_ID() );
+ break;
+
+ case 'gallery':
+ $post_featured_data = get_post_gallery( get_the_ID(), false );
+ if ( isset( $post_featured_data['ids'] ) ) {
+ $img_ids = explode( ',', $post_featured_data['ids'] );
+
+ $image_alt = get_post_meta( $img_ids[0], '_wp_attachment_image_alt', true );
+ $image_url = wp_get_attachment_url( $img_ids[0] );
+
+ if ( isset( $img_ids[0] ) ) {
+ $post_featured_data = '<a href="' . esc_url( get_permalink() ) . '" >';
+ $post_featured_data .= '<img src="' . esc_url( $image_url ) . '" alt="' . esc_attr( $image_alt ) . '" >';
+ $post_featured_data .= '</a>';
+ }
+ }
+ break;
+
+ case 'audio':
+ $post_featured_data = do_shortcode( astra_get_audios_from_post( get_the_ID() ) );
+ break;
+ }
+ }
+
+ echo $post_featured_data; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
+ }
+}
+
+add_action( 'astra_blog_post_featured_format', 'astra_blog_post_get_featured_item' );
+
+
+/**
+ * Blog Post Thumbnail / Title & Meta Order
+ */
+if ( ! function_exists( 'astra_blog_post_thumbnail_and_title_order' ) ) {
+
+ /**
+ * Blog post Thubmnail, Title & Blog Meta order
+ *
+ * @since 1.0.8
+ */
+ function astra_blog_post_thumbnail_and_title_order() {
+
+ $blog_post_thumb_title_order = astra_get_option( 'blog-post-structure' );
+ if ( is_single() ) {
+ $blog_post_thumb_title_order = astra_get_option( 'blog-single-post-structure' );
+ }
+ if ( is_array( $blog_post_thumb_title_order ) ) {
+ // Append the custom class for second element for single post.
+ foreach ( $blog_post_thumb_title_order as $post_thumb_title_order ) {
+
+ switch ( $post_thumb_title_order ) {
+
+ // Blog Post Featured Image.
+ case 'image':
+ do_action( 'astra_blog_archive_featured_image_before' );
+ astra_get_blog_post_thumbnail( 'archive' );
+ do_action( 'astra_blog_archive_featured_image_after' );
+ break;
+
+ // Blog Post Title and Blog Post Meta.
+ case 'title-meta':
+ do_action( 'astra_blog_archive_title_meta_before' );
+ astra_get_blog_post_title_meta();
+ do_action( 'astra_blog_archive_title_meta_after' );
+ break;
+
+ // Single Post Featured Image.
+ case 'single-image':
+ do_action( 'astra_blog_single_featured_image_before' );
+ astra_get_blog_post_thumbnail( 'single' );
+ do_action( 'astra_blog_single_featured_image_after' );
+ break;
+
+ // Single Post Title and Single Post Meta.
+ case 'single-title-meta':
+ do_action( 'astra_blog_single_title_meta_before' );
+ astra_get_single_post_title_meta();
+ do_action( 'astra_blog_single_title_meta_after' );
+ break;
+ }
+ }
+ }
+ }
+}
+
+/**
+ * Blog / Single Post Thumbnail
+ */
+if ( ! function_exists( 'astra_get_blog_post_thumbnail' ) ) {
+
+ /**
+ * Blog post Thumbnail
+ *
+ * @param string $type Type of post.
+ * @since 1.0.8
+ */
+ function astra_get_blog_post_thumbnail( $type = 'archive' ) {
+
+ if ( 'archive' === $type ) {
+ // Blog Post Featured Image.
+ astra_get_post_thumbnail( '<div class="ast-blog-featured-section post-thumb ' . astra_attr( 'ast-grid-blog-col' ) . '">', '</div>' );
+ } elseif ( 'single' === $type ) {
+ // Single Post Featured Image.
+ astra_get_post_thumbnail();
+ }
+ }
+}
+
+/**
+ * Blog Post Title & Meta Order
+ */
+if ( ! function_exists( 'astra_get_blog_post_title_meta' ) ) {
+
+ /**
+ * Blog post Thumbnail
+ *
+ * @since 1.0.8
+ */
+ function astra_get_blog_post_title_meta() {
+
+ // Blog Post Title and Blog Post Meta.
+ do_action( 'astra_archive_entry_header_before' );
+ ?>
+ <header class="entry-header">
+ <?php
+
+ do_action( 'astra_archive_post_title_before' );
+
+ /* translators: 1: Current post link, 2: Current post id */
+ astra_the_post_title(
+ sprintf(
+ '<h2 class="entry-title" %2$s><a href="%1$s" rel="bookmark">',
+ esc_url( get_permalink() ),
+ astra_attr(
+ 'article-title-blog',
+ array(
+ 'class' => '',
+ )
+ )
+ ),
+ '</a></h2>',
+ get_the_id()
+ );
+
+ do_action( 'astra_archive_post_title_after' );
+
+ ?>
+ <?php
+
+ do_action( 'astra_archive_post_meta_before' );
+
+ astra_blog_get_post_meta();
+
+ do_action( 'astra_archive_post_meta_after' );
+
+ ?>
+ </header><!-- .entry-header -->
+ <?php
+
+ do_action( 'astra_archive_entry_header_after' );
+ }
+}
+
+/**
+ * Single Post Title & Meta Order
+ */
+if ( ! function_exists( 'astra_get_single_post_title_meta' ) ) {
+
+ /**
+ * Blog post Thumbnail
+ *
+ * @since 1.0.8
+ */
+ function astra_get_single_post_title_meta() {
+
+ // Single Post Title and Single Post Meta.
+ do_action( 'astra_single_post_order_before' );
+
+ ?>
+ <div class="ast-single-post-order">
+ <?php
+
+ do_action( 'astra_single_post_title_before' );
+
+ astra_the_title(
+ '<h1 class="entry-title" ' . astra_attr(
+ 'article-title-blog-single',
+ array(
+ 'class' => '',
+ )
+ ) . '>',
+ '</h1>'
+ );
+
+ do_action( 'astra_single_post_title_after' );
+
+ do_action( 'astra_single_post_meta_before' );
+
+ astra_single_get_post_meta();
+
+ do_action( 'astra_single_post_meta_after' );
+
+ ?>
+ </div>
+ <?php
+
+ do_action( 'astra_single_post_order_after' );
+ }
+}
+
+/**
+ * Get audio files from post content
+ */
+if ( ! function_exists( 'astra_get_audios_from_post' ) ) {
+
+ /**
+ * Get audio files from post content
+ *
+ * @param number $post_id Post id.
+ * @return mixed Iframe.
+ */
+ function astra_get_audios_from_post( $post_id ) {
+
+ // for audio post type - grab.
+ $post = get_post( $post_id );
+ $content = do_shortcode( apply_filters( 'the_content', $post->post_content ) );
+ $embeds = apply_filters( 'astra_get_post_audio', get_media_embedded_in_content( $content ) );
+
+ if ( empty( $embeds ) ) {
+ return '';
+ }
+
+ // check what is the first embed containg video tag, youtube or vimeo.
+ foreach ( $embeds as $embed ) {
+ if ( strpos( $embed, 'audio' ) ) {
+ return '<span class="ast-post-audio-wrapper">' . $embed . '</span>';
+ }
+ }
+ }
+}
+
+/**
+ * Get first image from post content
+ */
+if ( ! function_exists( 'astra_get_video_from_post' ) ) {
+
+ /**
+ * Get first image from post content
+ *
+ * @since 1.0
+ * @param number $post_id Post id.
+ * @return mixed
+ */
+ function astra_get_video_from_post( $post_id ) {
+
+ $post = get_post( $post_id );
+ $content = do_shortcode( apply_filters( 'the_content', $post->post_content ) );
+ $embeds = apply_filters( 'astra_get_post_audio', get_media_embedded_in_content( $content ) );
+
+ if ( empty( $embeds ) ) {
+ return '';
+ }
+
+ // check what is the first embed containg video tag, youtube or vimeo.
+ foreach ( $embeds as $embed ) {
+ if ( strpos( $embed, 'video' ) || strpos( $embed, 'youtube' ) || strpos( $embed, 'vimeo' ) ) {
+ return $embed;
+ }
+ }
+ }
+}
diff --git a/inc/blog/index.php b/inc/blog/index.php
new file mode 100644
index 0000000..8b96815
--- /dev/null
+++ b/inc/blog/index.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Index file
+ *
+ * @package Astra
+ * @since Astra 1.0.0
+ */
+
+/* Silence is golden, and we agree. */
diff --git a/inc/blog/single-blog.php b/inc/blog/single-blog.php
new file mode 100644
index 0000000..97b7acd
--- /dev/null
+++ b/inc/blog/single-blog.php
@@ -0,0 +1,277 @@
+<?php
+/**
+ * Single Blog Helper Functions
+ *
+ * @package Astra
+ */
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
+/**
+ * Adds custom classes to the array of body classes.
+ */
+if ( ! function_exists( 'astra_single_body_class' ) ) {
+
+ /**
+ * Adds custom classes to the array of body classes.
+ *
+ * @since 1.0.0
+ * @param array $classes Classes for the body element.
+ * @return array
+ */
+ function astra_single_body_class( $classes ) {
+
+ // Blog layout.
+ if ( is_single() ) {
+ $classes[] = 'ast-blog-single-style-1';
+
+ if ( 'post' != get_post_type() ) {
+ $classes[] = 'ast-custom-post-type';
+ }
+ }
+
+ if ( is_singular() ) {
+ $classes[] = 'ast-single-post';
+ }
+
+ return $classes;
+ }
+}
+
+add_filter( 'body_class', 'astra_single_body_class' );
+
+/**
+ * Adds custom classes to the array of body classes.
+ */
+if ( ! function_exists( 'astra_single_post_class' ) ) {
+
+ /**
+ * Adds custom classes to the array of body classes.
+ *
+ * @since 1.0.0
+ * @param array $classes Classes for the body element.
+ * @return array
+ */
+ function astra_single_post_class( $classes ) {
+
+ // Blog layout.
+ if ( is_singular() ) {
+ $classes[] = 'ast-article-single';
+
+ // Remove hentry from page.
+ if ( 'page' == get_post_type() ) {
+ $classes = array_diff( $classes, array( 'hentry' ) );
+ }
+ }
+
+ return $classes;
+ }
+}
+
+add_filter( 'post_class', 'astra_single_post_class' );
+
+/**
+ * Prints HTML with meta information for the current post-date/time and author.
+ */
+if ( ! function_exists( 'astra_single_get_post_meta' ) ) {
+
+ /**
+ * Prints HTML with meta information for the current post-date/time and author.
+ *
+ * @param boolean $echo Output print or return.
+ * @return string|void
+ */
+ function astra_single_get_post_meta( $echo = true ) {
+
+ $enable_meta = apply_filters( 'astra_single_post_meta_enabled', '__return_true' );
+ $post_meta = astra_get_option( 'blog-single-meta' );
+ $current_post_type = get_post_type();
+ $post_type_array = apply_filters( 'astra_single_post_type_meta', array( 'post' ) );
+
+ $output = '';
+ if ( is_array( $post_meta ) && ( in_array( $current_post_type, $post_type_array ) || 'attachment' == $current_post_type ) && $enable_meta ) {
+
+ $output_str = astra_get_post_meta( $post_meta );
+ if ( ! empty( $output_str ) ) {
+ $output = apply_filters( 'astra_single_post_meta', '<div class="entry-meta">' . $output_str . '</div>', $output_str ); // WPCS: XSS OK.
+ }
+ }
+ if ( $echo ) {
+ echo $output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
+ } else {
+ return $output;
+ }
+ }
+}
+
+/**
+ * Template for comments and pingbacks.
+ */
+if ( ! function_exists( 'astra_theme_comment' ) ) {
+
+ /**
+ * Template for comments and pingbacks.
+ *
+ * To override this walker in a child theme without modifying the comments template
+ * simply create your own astra_theme_comment(), and that function will be used instead.
+ *
+ * Used as a callback by wp_list_comments() for displaying the comments.
+ *
+ * @param string $comment Comment.
+ * @param array $args Comment arguments.
+ * @param number $depth Depth.
+ * @return mixed Comment markup.
+ */
+ function astra_theme_comment( $comment, $args, $depth ) {
+
+ switch ( $comment->comment_type ) {
+
+ case 'pingback':
+ case 'trackback':
+ // Display trackbacks differently than normal comments.
+ ?>
+ <li <?php comment_class(); ?> id="comment-<?php comment_ID(); ?>">
+ <p><?php esc_html_e( 'Pingback:', 'astra' ); ?> <?php comment_author_link(); ?> <?php edit_comment_link( __( '(Edit)', 'astra' ), '<span class="edit-link">', '</span>' ); ?></p>
+ </li>
+ <?php
+ break;
+
+ default:
+ // Proceed with normal comments.
+ global $post;
+ ?>
+ <li <?php comment_class(); ?> id="li-comment-<?php comment_ID(); ?>">
+
+ <article id="comment-<?php comment_ID(); ?>" class="ast-comment">
+ <div class= 'ast-comment-info'>
+ <div class='ast-comment-avatar-wrap'><?php echo get_avatar( $comment, 50 ); ?></div><!-- Remove 1px Space
+ -->
+ <?php
+ astra_markup_open( 'ast-comment-data-wrap' );
+ astra_markup_open( 'ast-comment-meta-wrap' );
+ echo '<header ';
+ echo astra_attr(
+ 'commen-meta-author',
+ array(
+ 'class' => 'ast-comment-meta ast-row ast-comment-author vcard capitalize',
+ )
+ );
+ echo '>';
+
+ printf(
+ astra_markup_open(
+ 'ast-comment-cite-wrap',
+ array(
+ 'open' => '<div %s>',
+ 'class' => 'ast-comment-cite-wrap',
+ )
+ ) . '<cite><b class="fn">%1$s</b> %2$s</cite></div>',
+ get_comment_author_link(),
+ // If current post author is also comment author, make it known visually.
+ ( $comment->user_id === $post->post_author ) ? '<span class="ast-highlight-text ast-cmt-post-author"></span>' : ''
+ );
+
+ if ( apply_filters( 'astra_single_post_comment_time_enabled', true ) ) {
+ printf(
+ esc_attr(
+ astra_markup_open(
+ 'ast-comment-time',
+ array(
+ 'open' => '<div %s>',
+ 'class' => 'ast-comment-time',
+ )
+ )
+ ) . '<span class="timendate"><a href="%1$s"><time datetime="%2$s">%3$s</time></a></span></div>',
+ esc_url( get_comment_link( $comment->comment_ID ) ),
+ esc_attr( get_comment_time( 'c' ) ),
+ /* translators: 1: date, 2: time */
+ esc_html( sprintf( __( '%1$s at %2$s', 'astra' ), get_comment_date(), get_comment_time() ) )
+ );
+ }
+
+ ?>
+ <?php astra_markup_close( 'ast-comment-meta-wrap' ); ?>
+ </header> <!-- .ast-comment-meta -->
+ </div>
+ <section class="ast-comment-content comment">
+ <?php comment_text(); ?>
+ <div class="ast-comment-edit-reply-wrap">
+ <?php edit_comment_link( astra_default_strings( 'string-comment-edit-link', false ), '<span class="ast-edit-link">', '</span>' ); ?>
+ <?php
+ comment_reply_link(
+ array_merge(
+ $args,
+ array(
+ 'reply_text' => astra_default_strings( 'string-comment-reply-link', false ),
+ 'add_below' => 'comment',
+ 'depth' => $depth,
+ 'max_depth' => $args['max_depth'],
+ 'before' => '<span class="ast-reply-link">',
+ 'after' => '</span>',
+ )
+ )
+ );
+ ?>
+ </div>
+ <?php if ( '0' == $comment->comment_approved ) : ?>
+ <p class="ast-highlight-text comment-awaiting-moderation"><?php echo esc_html( astra_default_strings( 'string-comment-awaiting-moderation', false ) ); ?></p>
+ <?php endif; ?>
+ </section> <!-- .ast-comment-content -->
+ <?php astra_markup_close( 'ast-comment-data-wrap' ); ?>
+ </article><!-- #comment-## -->
+
+ <?php
+ break;
+ }
+ }
+}
+
+/**
+ * Get Post Navigation
+ */
+if ( ! function_exists( 'astra_single_post_navigation_markup' ) ) {
+
+ /**
+ * Get Post Navigation
+ *
+ * Checks post navigation, if exists return as button.
+ *
+ * @return mixed Post Navigation Buttons
+ */
+ function astra_single_post_navigation_markup() {
+
+ $single_post_navigation_enabled = apply_filters( 'astra_single_post_navigation_enabled', true );
+
+ if ( is_single() && $single_post_navigation_enabled ) {
+
+ $post_obj = get_post_type_object( get_post_type() );
+
+ $next_text = sprintf(
+ astra_default_strings( 'string-single-navigation-next', false ),
+ $post_obj->labels->singular_name
+ );
+
+ $prev_text = sprintf(
+ astra_default_strings( 'string-single-navigation-previous', false ),
+ $post_obj->labels->singular_name
+ );
+ /**
+ * Filter the post pagination markup
+ */
+ the_post_navigation(
+ apply_filters(
+ 'astra_single_post_navigation',
+ array(
+ 'next_text' => $next_text,
+ 'prev_text' => $prev_text,
+ )
+ )
+ );
+
+ }
+ }
+}
+
+add_action( 'astra_entry_after', 'astra_single_post_navigation_markup' );