Ticket #1368 (closed enhancement: fixed)

Opened 7 years ago

Last modified 5 years ago

Should apply "posts_where" filter in get_archives

Reported by: anonymousbugger Owned by: westi
Priority: normal Milestone: 2.2
Component: Administration Version: 1.5.1
Severity: normal Keywords: has-patch
Cc:

Description

There is currently no hook for plugins wishing to modify the SQL queries for archives (i.e. like posts_where or post_join)

Attachments

template_functions_general_1.5.1.2_mp001_hookup.patch Download (3.4 KB) - added by pejve 7 years ago.
template_functions_general_1.5.1.2_mp001_hookup2.patch Download (3.4 KB) - added by pejve 7 years ago.
1368.diff Download (3.8 KB) - added by westi 5 years ago.
New filters
1368a.diff Download (3.9 KB) - added by westi 5 years ago.
Fixed patch
test_plugin.php Download (454 bytes) - added by westi 5 years ago.
Example plugin to test with just changes the WHERE

Change History

  • Patch set to No

comment:2   fil7 years ago

  • Severity changed from trivial to minor

I had a patch for this laying around. Well, it's for 1.5.1.2 and it applies both "posts_where" and "posts_join". I hope you don't mind. Please be gentle, I'm new here.

I just realised the patch above is flawed. The names "posts_join" and "posts_where" should not be reused as there would be no good way to tell from where the handler was called, and thus what context to filter for.

I renamed the filters to "archive_join" and "archive_where" and submitted an updated patch.

  • Severity changed from minor to normal

I think that the severity is not "minor". Without this fix, plugins like my category access plugin cannot properly filter posts. In my case, as a result of this problem protected posts cannot be properly excluded from lists returned by get_archives.

Hm... I seem to have the power to up the severity to "normal", so I guess I'll do so. Sorry if I'm overstepping my authority.

  • Milestone set to 2.1

comment:8   ryan5 years ago

coppit, will something like this suffice:

$query = "SELECT blah blah blah";
$query = apply_filters('get_archives_query', $query, $args);

If so, want to cook up a patch?

comment:9   fil5 years ago

Would work for my plugin (I'm hooking into the query filter and relying on matching the exact sql)

  • Owner changed from anonymous to ryan
  • Milestone changed from 2.1 to 2.1.1
  • Milestone changed from 2.1.1 to 2.2
  • Keywords has-patch added
  • Owner changed from ryan to westi
  • Status changed from new to assigned
  • Type changed from defect to enhancement

I have updated the patch to apply to current trunk.

Rather than a single query filter I prefer the WHERE and JOIN filters like we have elsewhere to make sure people don't break the required filtering dependant on the type of archive links being displayed

westi5 years ago

New filters

comment:14 follow-up: ↓ 16   ryan5 years ago

WHERE needs to come after JOIN. There's a comma missing in one of the apply_filters calls. Let's pass $r to the filters.

  • Keywords needs-patch added; has-patch removed

comment:16 in reply to: ↑ 14   westi5 years ago

Replying to ryan:

WHERE needs to come after JOIN. There's a comma missing in one of the apply_filters calls. Let's pass $r to the filters.

That'll teach me for trying to cook up a patch just before I went to bed!

Fixed patch incoming (and I'll have time to testing this time too!)

westi5 years ago

Fixed patch

westi5 years ago

Example plugin to test with just changes the WHERE

  • Keywords has-patch added; needs-patch removed
  • Status changed from assigned to closed
  • Resolution set to fixed
Note: See TracTickets for help on using tickets.