View source
<?php
function gutenberg_latest_comments_draft_or_post_title($post = 0) {
$title = get_the_title($post);
if (empty($title)) {
$title = __('(no title)');
}
return esc_html($title);
}
function gutenberg_render_block_core_latest_comments($attributes = array()) {
$comments = get_comments(apply_filters('widget_comments_args', array(
'number' => $attributes['commentsToShow'],
'status' => 'approve',
'post_status' => 'publish',
)));
$list_items_markup = '';
if (!empty($comments)) {
$post_ids = array_unique(wp_list_pluck($comments, 'comment_post_ID'));
_prime_post_caches($post_ids, strpos(get_option('permalink_structure'), '%category%'), false);
foreach ($comments as $comment) {
$list_items_markup .= '<li class="wp-block-latest-comments__comment">';
if ($attributes['displayAvatar']) {
$avatar = get_avatar($comment, 48, '', '', array(
'class' => 'wp-block-latest-comments__comment-avatar',
));
if ($avatar) {
$list_items_markup .= $avatar;
}
}
$list_items_markup .= '<article>';
$list_items_markup .= '<footer class="wp-block-latest-comments__comment-meta">';
$author_url = get_comment_author_url($comment);
if (empty($author_url) && !empty($comment->user_id)) {
$author_url = get_author_posts_url($comment->user_id);
}
$author_markup = '';
if ($author_url) {
$author_markup .= '<a class="wp-block-latest-comments__comment-author" href="' . esc_url($author_url) . '">' . get_comment_author($comment) . '</a>';
}
else {
$author_markup .= '<span class="wp-block-latest-comments__comment-author">' . get_comment_author($comment) . '</span>';
}
$post_title = '<a class="wp-block-latest-comments__comment-link" href="' . esc_url(get_comment_link($comment)) . '">' . gutenberg_latest_comments_draft_or_post_title($comment->comment_post_ID) . '</a>';
$list_items_markup .= sprintf(__('%1$s on %2$s'), $author_markup, $post_title);
if ($attributes['displayDate']) {
$list_items_markup .= sprintf('<time datetime="%1$s" class="wp-block-latest-comments__comment-date">%2$s</time>', esc_attr(get_comment_date('c', $comment)), date_i18n(get_option('date_format'), get_comment_date('U', $comment)));
}
$list_items_markup .= '</footer>';
if ($attributes['displayExcerpt']) {
$list_items_markup .= '<div class="wp-block-latest-comments__comment-excerpt">' . wpautop(get_comment_excerpt($comment)) . '</div>';
}
$list_items_markup .= '</article></li>';
}
}
$class = 'wp-block-latest-comments';
if (!empty($attributes['className'])) {
$class .= ' ' . $attributes['className'];
}
if (isset($attributes['align'])) {
$class .= " align{$attributes['align']}";
}
if ($attributes['displayAvatar']) {
$class .= ' has-avatars';
}
if ($attributes['displayDate']) {
$class .= ' has-dates';
}
if ($attributes['displayExcerpt']) {
$class .= ' has-excerpts';
}
if (empty($comments)) {
$class .= ' no-comments';
}
$classnames = esc_attr($class);
return !empty($comments) ? sprintf('<ol class="%1$s">%2$s</ol>', $classnames, $list_items_markup) : sprintf('<div class="%1$s">%2$s</div>', $classnames, __('No comments to show.'));
}
function gutenberg_register_block_core_latest_comments() {
register_block_type_from_metadata(__DIR__ . '/latest-comments', array(
'render_callback' => 'gutenberg_render_block_core_latest_comments',
));
}
add_action('init', 'gutenberg_register_block_core_latest_comments', 20);