geno/wp-content/themes/astra/inc/blog/single-blog.php
2024-02-01 11:54:18 +00:00

293 lines
9.9 KiB
PHP

<?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() ) {
if ( ! in_array( 'ast-related-post', $classes ) ) {
$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' );
/**
* 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;
$entry_content_class = Astra_Dynamic_CSS::astra_4_6_0_compatibility() ? ' entry-content' : '';
?>
<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 echo esc_attr( $entry_content_class ); ?>">
<?php comment_text(); ?>
<div class="ast-comment-edit-reply-wrap">
<?php
if ( Astra_Dynamic_CSS::astra_4_6_0_compatibility() ) {
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>',
)
)
);
edit_comment_link( astra_default_strings( 'string-comment-edit-link', false ), '<span class="ast-edit-link">', '</span>' );
} else {
edit_comment_link( astra_default_strings( 'string-comment-edit-link', false ), '<span class="ast-edit-link">', '</span>' );
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;
}
}
}
/**
* Adjacent navigation post link attributes.
*
* @param string $output The adjacent post link.
* @param string $format Link anchor format.
* @param string $link Link permalink format.
* @param WP_Post|string $post The adjacent post. Empty string if no corresponding post exists.
* @param string $adjacent Whether the post is previous or next.
*
* @return string Link of post URL.
* @since 4.6.0
*/
function astra_adjacent_post_links_title( $output, $format, $link, $post, $adjacent ) {
/** @psalm-suppress PossiblyInvalidPropertyFetch */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
if ( ! empty( $post->post_title ) ) {
/** @psalm-suppress PossiblyInvalidPropertyFetch */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$output = str_replace( 'href="', 'title="' . esc_attr( $post->post_title ) . '"' . 'href="', $output );
}
return $output;
}
/**
* 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() );
/** @psalm-suppress PossiblyNullPropertyFetch */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$post_singular_name = ! empty( $post_obj->labels->singular_name ) ? $post_obj->labels->singular_name : '';
/** @psalm-suppress PossiblyNullPropertyFetch */ // phpcs:ignore Generic.Commenting.DocComment.MissingShort
$prev_text = Astra_Dynamic_CSS::astra_4_6_0_compatibility() ? '<span class="ast-post-nav">' . Astra_Builder_UI_Controller::fetch_svg_icon( 'long-arrow-alt-left' ) . ' ' . astra_default_strings( 'string-previous-text', false ) . '</span> <p> %title </p>' : sprintf(
astra_default_strings( 'string-single-navigation-previous', false ),
$post_singular_name
);
$next_text = Astra_Dynamic_CSS::astra_4_6_0_compatibility() ? '<span class="ast-post-nav">' . astra_default_strings( 'string-next-text', false ) . ' ' . Astra_Builder_UI_Controller::fetch_svg_icon( 'long-arrow-alt-right' ) . '</span> <p> %title </p>' : sprintf(
astra_default_strings( 'string-single-navigation-next', false ),
$post_singular_name
);
add_filter( 'previous_post_link', 'astra_adjacent_post_links_title', 10, 5 );
add_filter( 'next_post_link', 'astra_adjacent_post_links_title', 10, 5 );
/**
* Filter the post pagination markup
*/
the_post_navigation(
apply_filters(
'astra_single_post_navigation',
array(
'next_text' => $next_text,
'prev_text' => $prev_text,
'screen_reader_text' => __( 'Post navigation', 'astra' ),
)
)
);
remove_filter( 'previous_post_link', 'astra_adjacent_post_links_title', 10 );
remove_filter( 'next_post_link', 'astra_adjacent_post_links_title', 10 );
}
}
}
add_action( 'astra_entry_after', 'astra_single_post_navigation_markup' );