Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Comments: Allow comment types to register a display callback#53

Open
adamsilverstein wants to merge 4 commits into
feature/register-comment-typefrom
feature/comment-type-render-callback
Open

Comments: Allow comment types to register a display callback#53
adamsilverstein wants to merge 4 commits into
feature/register-comment-typefrom
feature/comment-type-render-callback

Conversation

@adamsilverstein

Copy link
Copy Markdown
Owner

Description

Adds a render_callback argument to register_comment_type() so a custom comment type can control how its comments are displayed in comment lists, addressing dshanske's request on the tracking ticket (#35214 comment:18) for "a way to register a callback to handle display that can still be overridden by the usual methods."

What it adds

  • A render_callback registration argument, stored on WP_Comment_Type (default null).
  • Walker_Comment::start_el() dispatches to a comment type's render_callback when one is set, passing the same arguments as the wp_list_comments() callback: the comment, the arguments array, and the depth.
register_comment_type( 'review', array(
    'render_callback' => function ( $comment, $args, $depth ) {
        // Custom markup for a "review" comment.
    },
) );

Precedence / non-breaking

  • An explicit callback passed to wp_list_comments() still takes precedence (handled before the type callback).
  • Built-in types (comment, pingback, trackback) set no callback, so their output is unchanged.

Scope / boundary

Stacked on WordPress#12311 (the register_comment_type() API) and targets that branch; it will be retargeted to trunk once WordPress#12311 lands. This is item 3 of the remaining below-the-hood work on #35214.

Item 4 (generalizing the remaining hard-coded pingback/trackback checks in Walker_Comment and separate_comments()) is intentionally not included: those checks encode a ping-vs-comment distinction the registry does not yet model, so generalizing them safely needs a dedicated "ping grouping" concept on the registration object and carries output-regression risk. It is better handled as its own focused PR.

Testing

$ phpunit --group comment
OK (585 tests, 1442 assertions)

New coverage in tests/phpunit/tests/comment/walker.php and wpCommentType.php. PHPCS and PHPStan are clean on the changed files.

See #35214.

Add a `render_callback` argument to `register_comment_type()`, stored on
`WP_Comment_Type`. When a comment's registered type defines one, `Walker_Comment`
uses it to render that comment, receiving the same arguments as the `callback`
argument of wp_list_comments() (the comment, the arguments, and the depth).

This gives custom comment types control over their own display, as raised in
the tracking ticket, without each type having to filter the walker. An explicit
`callback` passed to wp_list_comments() still takes precedence, and built-in
types set no callback, so there is no change to existing output.

See #35214.
Cover the `render_callback` argument: that a registered type's callback renders
its comments through `Walker_Comment`, that an explicit wp_list_comments()
`callback` takes precedence, that a type without a callback renders normally,
and that the property defaults to null and stores a provided callable.

See #35214.
@coderabbitai

coderabbitai Bot commented Jun 24, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 7b5705f7-92a3-40a8-af60-9069b5240e3e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/comment-type-render-callback

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

Core Committers: Use this line as a base for the props when committing in SVN:

Props adamsilverstein.

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

…ard.

Add a test asserting the render_callback receives the comment, the
arguments array, and the depth (the documented wp_list_comments()
callback contract, previously only the comment was exercised), and a
test that a non-callable render_callback is ignored via is_callable()
and the comment renders normally.

See #35214.
Walker_Comment prints the render_callback output verbatim, matching the
existing wp_list_comments() `callback` contract. Note in both the
WP_Comment_Type::$render_callback property and the register_comment_type()
parameter docs that the callback is responsible for escaping its output.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant