WordPress Version: 6.2
/**
* Server-side rendering of the `core/post-comments-form` block.
*
* @package WordPress
*/
/**
* Renders the `core/post-comments-form` 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 filtered post comments form for the current post.
*/
function render_block_core_post_comments_form($attributes, $content, $block)
{
if (!isset($block->context['postId'])) {
return '';
}
if (post_password_required($block->context['postId'])) {
return;
}
$classes = array('comment-respond');
// See comment further below.
if (isset($attributes['textAlign'])) {
$classes[] = 'has-text-align-' . $attributes['textAlign'];
}
if (isset($attributes['style']['elements']['link']['color']['text'])) {
$classes[] = 'has-link-color';
}
$wrapper_attributes = get_block_wrapper_attributes(array('class' => implode(' ', $classes)));
add_filter('comment_form_defaults', 'post_comments_form_block_form_defaults');
ob_start();
comment_form(array(), $block->context['postId']);
$form = ob_get_clean();
remove_filter('comment_form_defaults', 'post_comments_form_block_form_defaults');
// We use the outermost wrapping `<div />` returned by `comment_form()`
// which is identified by its default classname `comment-respond` to inject
// our wrapper attributes. This way, it is guaranteed that all styling applied
// to the block is carried along when the comment form is moved to the location
// of the 'Reply' link that the user clicked by Core's `comment-reply.js` script.
$form = str_replace('class="comment-respond"', $wrapper_attributes, $form);
// Enqueue the comment-reply script.
wp_enqueue_script('comment-reply');
return $form;
}