[ Index ] |
PHP Cross Reference of WordPress |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Server-side rendering of the `core/comment-template` block. 4 * 5 * @package WordPress 6 */ 7 8 /** 9 * Function that recursively renders a list of nested comments. 10 * 11 * @global int $comment_depth 12 * 13 * @param WP_Comment[] $comments The array of comments. 14 * @param WP_Block $block Block instance. 15 * @return string 16 */ 17 function block_core_comment_template_render_comments( $comments, $block ) { 18 global $comment_depth; 19 20 if ( empty( $comment_depth ) ) { 21 $comment_depth = 1; 22 } 23 24 $content = ''; 25 foreach ( $comments as $comment ) { 26 27 $block_content = ( new WP_Block( 28 $block->parsed_block, 29 array( 30 'commentId' => $comment->comment_ID, 31 ) 32 ) )->render( array( 'dynamic' => false ) ); 33 34 $children = $comment->get_children(); 35 36 /* 37 * We need to create the CSS classes BEFORE recursing into the children. 38 * This is because comment_class() uses globals like `$comment_alt` 39 * and `$comment_thread_alt` which are order-sensitive. 40 * 41 * The `false` parameter at the end means that we do NOT want the function 42 * to `echo` the output but to return a string. 43 * See https://developer.wordpress.org/reference/functions/comment_class/#parameters. 44 */ 45 $comment_classes = comment_class( '', $comment->comment_ID, $comment->comment_post_ID, false ); 46 47 // If the comment has children, recurse to create the HTML for the nested 48 // comments. 49 if ( ! empty( $children ) ) { 50 $comment_depth += 1; 51 $inner_content = block_core_comment_template_render_comments( 52 $children, 53 $block 54 ); 55 $block_content .= sprintf( '<ol>%1$s</ol>', $inner_content ); 56 $comment_depth -= 1; 57 } 58 59 $content .= sprintf( '<li id="comment-%1$s" %2$s>%3$s</li>', $comment->comment_ID, $comment_classes, $block_content ); 60 } 61 62 return $content; 63 64 } 65 66 /** 67 * Renders the `core/comment-template` block on the server. 68 * 69 * @param array $attributes Block attributes. 70 * @param string $content Block default content. 71 * @param WP_Block $block Block instance. 72 * 73 * @return string Returns the HTML representing the comments using the layout 74 * defined by the block's inner blocks. 75 */ 76 function render_block_core_comment_template( $attributes, $content, $block ) { 77 // Bail out early if the post ID is not set for some reason. 78 if ( empty( $block->context['postId'] ) ) { 79 return ''; 80 } 81 82 if ( post_password_required( $block->context['postId'] ) ) { 83 return; 84 } 85 86 $comment_query = new WP_Comment_Query( 87 build_comment_query_vars_from_block( $block ) 88 ); 89 90 // Get an array of comments for the current post. 91 $comments = $comment_query->get_comments(); 92 if ( count( $comments ) === 0 ) { 93 return ''; 94 } 95 96 $comment_order = get_option( 'comment_order' ); 97 98 if ( 'desc' === $comment_order ) { 99 $comments = array_reverse( $comments ); 100 } 101 102 $wrapper_attributes = get_block_wrapper_attributes(); 103 104 return sprintf( 105 '<ol %1$s>%2$s</ol>', 106 $wrapper_attributes, 107 block_core_comment_template_render_comments( $comments, $block ) 108 ); 109 } 110 111 /** 112 * Registers the `core/comment-template` block on the server. 113 */ 114 function register_block_core_comment_template() { 115 register_block_type_from_metadata( 116 __DIR__ . '/comment-template', 117 array( 118 'render_callback' => 'render_block_core_comment_template', 119 'skip_inner_blocks' => true, 120 ) 121 ); 122 } 123 add_action( 'init', 'register_block_core_comment_template' );
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Dec 22 01:00:02 2024 | Cross-referenced by PHPXref 0.7.1 |