[buddypress-trac] [BuddyPress Trac] #7343: Add the_group filter to allow group object modification
noreply at wordpress.org
Wed May 3 21:08:32 UTC 2017
#7343: Add the_group filter to allow group object modification
Reporter: ninjew | Owner: dcavins
Type: enhancement | Status: accepted
Priority: normal | Milestone: Under Consideration
Component: Groups | Version:
Severity: normal | Resolution:
Keywords: dev-feedback |
Comment (by ninjew):
Hello @dcavins and @boonebgorges,
I apologize for missing out the previous reply.
Having an action hook ( ex. do_action( 'bp_groups_group', $this ); )
inside BP_Groups_Group::populate() would be a great solution ( for my case
at least ) if it will allow to add custom data to the group object.
I will try explain my scenario in short:
My geolocation plugin ( GEO my WP ) allows geotagging posts, groups,
members and so on. GEO my WP saves the geolocation information in a custom
table in database. data like address fields, coordinates, object_type (
post, user, group...), object_id ( to relate to the object it belongs to )
GEO my WP also has a forms builder for admins to build custom proximity
search forms. The forms can search for geotagged data ( posts, members,
groups... ) based on address, radius and other filters. For these forms,
GEO my WP uses the native search query class/function of each object, for
example, WP_Query, bp_has_memebrs(), bp_has_groups(), and modify it to
display results nearby.
GEO my WP forms made of search form and search results template files. The
search results template file contains the original object loop and its
functions, with additional custom functions to display distance, maps, and
other location data.
This is http://demo.geomywp.com/buddypress-members-search-form a demo for
Members search form and http://demo.geomywp.com/search-post-type-with-
categories/ Posts search form created by GEO my WP.
The current version of GEO my WP modifies the main search query in the
FIELDS clause and by adding a JOIN clause to join the locations table and
modify the results by location. Doing so, the results already contains the
location data per object ( because of the FIELDS clause ). So the $post,
$memebr and $group object will have address fields and coords added to it,
which could then be used in the loop. This makes it easy to use the
different functions in the loop.
In new version of GEO my WP that I have been working on, I changed the way
the plugin modify the search queries. Mainly because of the issue
discussed in ticket:7290, but also because it is easier to maintain and
cache. Now the plugin first does the proximity search query on the
location table only to retrieve a list of locations, when each location
contains the location data and the object ID. Then it passes the locations
ID as an array into the "include" argument of the search query ( WP_Query,
bp_has_members().... ), which works well and returns only nearby objects.
However, now the location data is not included in the object results.
Rather, we end up with 2 objects; One contains the objects data and
another contains the locations.
With the new way of querying the locations I need to merge the location
data with each object before it "enters" the results loop. Which is easy
to do for the $post object using the "the_post" filter, but not for
$member or $group. For members and groups I now need to run an additional
custom loop before the results loop to merge the objects with the
locations. This additional loop is not only a waste of memory and
performance, but it also ends up adding the location data into each
object, which is what we are trying to prevent by not having a filter
similar to "the_post".
( Well, this wasn't as short as I wanted it to be :) )
I hope this is not too confusing and that it makes sense.
Ticket URL: <https://buddypress.trac.wordpress.org/ticket/7343#comment:8>
BuddyPress Trac <http://buddypress.org/>
More information about the buddypress-trac