#23208 closed defect (bug) (fixed)
Incorrect variable name for comment meta queries
| Reported by: |
|
Owned by: |
|
|---|---|---|---|
| Priority: | normal | Milestone: | 3.5.1 |
| Component: | Comments | Version: | 3.5 |
| Severity: | normal | Keywords: | |
| Cc: |
Description
An error notice I saw using the Liveblog plugin:
Undefined variable: q in /Users/danielbachhuber/wp/wp-includes/comment.php on line 299
traces back to r22074 where the following is added:
// Parse meta query $this->meta_query = new WP_Meta_Query(); $this->meta_query->parse_query_vars( $this->query_vars );
but then is used later as:
if ( ! empty( $this->query_vars['meta_key'] ) ) {
$allowed_keys[] = $q['meta_key'];
$allowed_keys[] = 'meta_value';
$allowed_keys[] = 'meta_value_num';
}
$ordersby = array_intersect( $ordersby, $allowed_keys );
foreach ( $ordersby as $key => $value ) {
if ( $value == $q['meta_key'] || $value == 'meta_value' ) {
$ordersby[ $key ] = "$wpdb->commentmeta.meta_value";
} elseif ( $value == 'meta_value_num' ) {
$ordersby[ $key ] = "$wpdb->commentmeta.meta_value+0";
}
}
}
Something like the patch attached resolves the error, but this would probably benefit from unit tests too.
Attachments (1)
Change History (9)
danielbachhuber — 4 months ago
comment:1
danielbachhuber — 4 months ago
Patch is incorrect; this is a case of taking $q and replacing it with $this->query_vars. $this->query_vars['meta_key'] is correct there, not 'meta_key'.
- Owner set to nacin
- Resolution set to fixed
- Status changed from new to closed
In 23332:
comment:6
danielbachhuber — 4 months ago
No props?
comment:7
SergeyBiryukov — 4 months ago
In 1191/tests:
comment:8
SergeyBiryukov — 4 months ago
- Keywords needs-patch removed
Replying to danielbachhuber:
Actually, it looks like there are already unit tests for this. I'll see if I can track down further why they don't fail when I have a moment.
The tests only had assertions for ordering by meta value. To trigger the bug, you need to order by meta key, which is functionally the same.

Actually, it looks like there are already unit tests for this. I'll see if I can track down further why they don't fail when I have a moment.