[buddypress-trac] [BuddyPress Trac] #9300: `is_home()` returns `true` on BuddyPress pages when checking early hooks

buddypress-trac noreply at wordpress.org
Thu Aug 21 18:42:41 UTC 2025


#9300: `is_home()` returns `true` on BuddyPress pages when checking early hooks
--------------------------+-----------------------------
 Reporter:  r-a-y         |      Owner:  (none)
     Type:  defect (bug)  |     Status:  new
 Priority:  normal        |  Milestone:  Awaiting Review
Component:  Route Parser  |    Version:  12.0.0
 Severity:  normal        |   Keywords:  has-patch
--------------------------+-----------------------------
 If a developer is doing checks for `is_home()` on an early hook like
 `'pre_get_posts'`, `is_home()` will currently return `true` on any
 BuddyPress page (except if a BuddyPress component is set as the front
 page, in this case, `is_home()` will return `false` as expected).

 BuddyPress pages should always have `is_home` set to `false` on these
 early hooks.

 You can use this code snippet to verify the current behavior:

 {{{#!php
 <?php
 add_action(
     'pre_get_posts',
     function( $query ) {
         if ( ! $query->is_main_query() ) {
             return;
         }

         // This returns true on all BuddyPress pages at this juncture.
         // Except for when a BP component page is set as the front page,
 then this returns false.
         var_dump( $query->is_home() );
     }
 );

 // Runs later in the WP bootstrap.
 add_action( 'wp', function() {
     // This returns false on all BuddyPress pages at this juncture.
     var_dump( is_home() );
 } );
 }}}



 Here's the technical rundown as to why `is_home()` is returning true on
 BuddyPress pages on early hooks such as the `'pre_get_posts'` hook:

 BuddyPress rewrite pages are not correctly set as `is_singular = true` at
 this juncture:
 https://github.com/WordPress/WordPress/blob/817670fdedda7cab8d01ddbb3e3ca0f0d95db6de
 /wp-includes/class-wp-query.php#L1035.

 This is because BuddyPress pages are not real pages (if we exclude
 directory pages), so WP's parse query block doesn't take this into
 account. See
 https://github.com/WordPress/WordPress/blob/817670fdedda7cab8d01ddbb3e3ca0f0d95db6de
 /wp-includes/class-wp-query.php#L881-L891 where WP actually sets `is_page`
 or `is_single`. BP rewrite rules do not use the query vars that WP is
 expecting such as `'pagename'` or `'name'`. So since `is_singular` is
 `false` when on a BP page, `is_home` is set to true at:
 https://github.com/WordPress/WordPress/blob/817670fdedda7cab8d01ddbb3e3ca0f0d95db6de
 /wp-includes/class-wp-query.php#L1044.

 To address this, we can either set the query vars that WP is expecting
 such as `'pagename'` or `'name'` to all our BP rewrite rules or we
 manually set `is_home` to the correct value of `false` when on the
 `'parse_query'` hook. I'm doing the latter since it's the easiest path.

-- 
Ticket URL: <https://buddypress.trac.wordpress.org/ticket/9300>
BuddyPress Trac <http://buddypress.org/>
BuddyPress Trac


More information about the buddypress-trac mailing list