Make WordPress Core

Opened 9 years ago

Last modified 7 months ago

#36409 assigned defect (bug)

Comments number is wrong

Reported by: sidati's profile sidati Owned by: pbearne's profile pbearne
Milestone: Priority: normal
Severity: normal Version:
Component: Comments Keywords: has-patch has-unit-tests
Focuses: template, performance Cc:

Description

Hi,
the comment number return the number of approved comments, this means all approved comments even those are replies to unapproved comments, for example if a user post comment and people replied to it, then the admin decide to hide this parent comment by disapproving it, the comment number will decrease only by one and keeping counting the hidden replies

So there are two option to fix that :

  1. Hold/Disapprove all children when disapproving the parent.
  2. Recalculate the comment number and excluding comments has an unapproved parent.

Regards,
Sidati

Attachments (3)

36409.patch (1.1 KB) - added by sidati 9 years ago.
36409-2.patch (1.4 KB) - added by sidati 9 years ago.
36409-3.patch (1.4 KB) - added by sidati 9 years ago.

Download all attachments as: .zip

Change History (17)

@sidati
9 years ago

#1 @sidati
9 years ago

  • Keywords has-patch added

I prefer the 2nd option even it's not so good for performance, maybe someone has better idea :)
https://core.trac.wordpress.org/attachment/ticket/36409/36409.patch

Version 0, edited 9 years ago by sidati (next)

#2 @sidati
9 years ago

  • Keywords has-patch removed

#3 @sidati
9 years ago

  • Keywords has-patch added

Working Patch and more optimized

@sidati
9 years ago

#4 @boonebgorges
9 years ago

  • Keywords needs-unit-tests added
  • Milestone changed from Awaiting Review to Future Release

Hi @sidati - Thanks for the patch. I agree that this is unexpected and incorrect behavior.

Your basic idea for fixing it seems right to me. A couple comments on the patch:

  • Could you generate it from the root of your WP installation? It makes it a bit easier to apply and test.
  • Your $depth logic reads backward to me. I mean, I can see that the patch works, but I would've counted the depth up instead of down. Maybe our minds work differently ;) Anyway, I wonder if the algorithm would be more transparent (and less subject to bugs related to 'thread_comment_depth' if it looked something like this (pseudocode):
$bad_parents = $wpdb->get_col( "SELECT comment_ID from $wpdb->comments WHERE comment_approved != 1" );
$_bad_parents = array();

do {
    $_bad_parents = $wpdb->get_col( "SELECT comment_ID from $wpdb->comments WHERE comment_parent IN (" . implode( ',', array_map( 'intval', $bad_parents ) ) . ")";
    $bad_parents += $_bad_parents;
} while ( $_bad_parents );

This separates the initial comment_approved query for clarity, and it ensures that we keep walking down the tree as long as bad comments are found.

We will also need unit tests to cover the problem.

@sidati
9 years ago

#5 @sidati
9 years ago

@boonebgorges;
I like your approach but if you realize the loop is infinite :), so i add a third variable to hold only the found children IDs to be used in the next loop.

You can test it now : 36409-3.patch

#6 in reply to: ↑ description @ambrosiawt
9 years ago

For what it's worth, this looks very similar to #18603. I sort of hope it fixes that one as well. :)

Art

Last edited 8 years ago by SergeyBiryukov (previous) (diff)

#7 @chriscct7
9 years ago

  • Version trunk deleted

This ticket was mentioned in Slack in #core-comments by sidati. View the logs.


9 years ago

#9 @sidati
8 years ago

I'll create a plugin on github to solve this issue and post it here with unit-tests

#10 @pbearne
7 months ago

@sidati did you ever create the unit tests?

This ticket was mentioned in PR #6431 on WordPress/wordpress-develop by @pbearne.


7 months ago
#11

  • Keywords has-unit-tests added; needs-unit-tests removed

This update revises the logic used in the wp_update_comment_count_now function. The change ensures that unapproved comments and their children are not included when calculating the comment count for a post. This method involves creating a list of 'bad parents', which represents comments that are not approved, and their associated child comments.

#12 @pbearne
7 months ago

I have refreshed the patched

#13 @pbearne
7 months ago

  • Owner set to pbearne
  • Status changed from new to assigned

#14 @sidati
7 months ago

Hey @pbearne, It’s been years and I don’t remember creating any test.

Note: See TracTickets for help on using tickets.