diff -r be944660c56a -r 3d72ae0968f4 wp/wp-includes/blocks/comment-template.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wp/wp-includes/blocks/comment-template.php Tue Sep 27 16:37:53 2022 +0200 @@ -0,0 +1,123 @@ +parsed_block, + array( + 'commentId' => $comment->comment_ID, + ) + ) )->render( array( 'dynamic' => false ) ); + + $children = $comment->get_children(); + + /* + * We need to create the CSS classes BEFORE recursing into the children. + * This is because comment_class() uses globals like `$comment_alt` + * and `$comment_thread_alt` which are order-sensitive. + * + * The `false` parameter at the end means that we do NOT want the function + * to `echo` the output but to return a string. + * See https://developer.wordpress.org/reference/functions/comment_class/#parameters. + */ + $comment_classes = comment_class( '', $comment->comment_ID, $comment->comment_post_ID, false ); + + // If the comment has children, recurse to create the HTML for the nested + // comments. + if ( ! empty( $children ) ) { + $comment_depth += 1; + $inner_content = block_core_comment_template_render_comments( + $children, + $block + ); + $block_content .= sprintf( '
    %1$s
', $inner_content ); + $comment_depth -= 1; + } + + $content .= sprintf( '
  • %3$s
  • ', $comment->comment_ID, $comment_classes, $block_content ); + } + + return $content; + +} + +/** + * Renders the `core/comment-template` block on the server. + * + * @param array $attributes Block attributes. + * @param string $content Block default content. + * @param WP_Block $block Block instance. + * + * @return string Returns the HTML representing the comments using the layout + * defined by the block's inner blocks. + */ +function render_block_core_comment_template( $attributes, $content, $block ) { + // Bail out early if the post ID is not set for some reason. + if ( empty( $block->context['postId'] ) ) { + return ''; + } + + if ( post_password_required( $block->context['postId'] ) ) { + return; + } + + $comment_query = new WP_Comment_Query( + build_comment_query_vars_from_block( $block ) + ); + + // Get an array of comments for the current post. + $comments = $comment_query->get_comments(); + if ( count( $comments ) === 0 ) { + return ''; + } + + $comment_order = get_option( 'comment_order' ); + + if ( 'desc' === $comment_order ) { + $comments = array_reverse( $comments ); + } + + $wrapper_attributes = get_block_wrapper_attributes(); + + return sprintf( + '
      %2$s
    ', + $wrapper_attributes, + block_core_comment_template_render_comments( $comments, $block ) + ); +} + +/** + * Registers the `core/comment-template` block on the server. + */ +function register_block_core_comment_template() { + register_block_type_from_metadata( + __DIR__ . '/comment-template', + array( + 'render_callback' => 'render_block_core_comment_template', + 'skip_inner_blocks' => true, + ) + ); +} +add_action( 'init', 'register_block_core_comment_template' );