Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions src/CommentData.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

declare(strict_types=1);

namespace Yard\Data;

use Carbon\CarbonImmutable;
use Spatie\LaravelData\Data;

/** @phpstan-consistent-constructor */
class CommentData extends Data
{
public function __construct(
public int $id,
public ?PostData $post,
public string $author,
public string $authorEmail,
public string $authorUrl,
public string $authorIp,
public ?CarbonImmutable $date,
public ?CarbonImmutable $dateGmt,
public string $content,
public bool $approved,
public string $agent,
public string $type,
public ?CommentData $parent,
public ?UserData $user,
) {
}

public static function fromComment(\WP_Comment $comment): static
{
return new static(
id: (int) $comment->comment_ID,
post: null !== get_post((int)$comment->comment_post_ID) ? PostData::fromPost(get_post((int)$comment->comment_post_ID)) : null,
Comment thread
ictbeheer marked this conversation as resolved.
author: $comment->comment_author,
authorEmail: $comment->comment_author_email,
authorUrl: $comment->comment_author_url,
authorIp: $comment->comment_author_IP,
date: CarbonImmutable::createFromFormat('Y-m-d H:i:s', $comment->comment_date)?: null,
dateGmt: CarbonImmutable::createFromFormat('Y-m-d H:i:s', $comment->comment_date_gmt)?: null,
content: $comment->comment_content,
approved: (bool) $comment->comment_approved,
Comment thread
ictbeheer marked this conversation as resolved.
Outdated
agent: $comment->comment_agent,
type: $comment->comment_type,
parent: null !== get_comment((int) $comment->comment_parent) ? CommentData::fromComment(get_comment((int) $comment->comment_parent)) : null,
user: false !== get_userdata((int) $comment->user_id) ? UserData::fromUser(get_userdata((int) $comment->user_id)) : null,
);
Comment thread
ictbeheer marked this conversation as resolved.
}
}
32 changes: 32 additions & 0 deletions src/PostData.php
Original file line number Diff line number Diff line change
Expand Up @@ -311,4 +311,36 @@ public function parent(): ?static

return static::fromPost($parent);
}

public function commentCount(): ?int
{
if (null === $this->id || ! post_type_supports($this->postType, 'comments')) {
return null;
}

return (int) get_comments_number($this->id);
}

/**
* @param array<string, mixed> $args
*
* @return Collection<int, CommentData>
*/
public function comments(array $args = []): Collection
{
if (null === $this->id || ! post_type_supports($this->postType, 'comments')) {
return collect();
}

Copilot AI Apr 2, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New behavior was added for comment counting and comment retrieval, but there are no tests covering these methods. Since PostData already has Pest/WP_Mock coverage, please add tests for commentCount() (supported vs unsupported post types and null ID) and comments() (default args and empty return when unsupported/null ID).

Copilot uses AI. Check for mistakes.

$args = wp_parse_args($args, [
'post_id' => $this->id,
'status' => 'approve',
'type' => 'comment',
]);

/** @var array<int, CommentData> $comments */
$comments = get_comments($args);

return CommentData::collect($comments, Collection::class);
Comment thread
ictbeheer marked this conversation as resolved.
Outdated
}
}
Loading