Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
09/14/2015 03:39:38 PM (10 years ago)
Author:
boonebgorges
Message:

When a copmonent directory is set to the front page, don't interfere with blog searches.

WP's default search query arg is 's', so that URLs like example.com?s=foo lead
to a search of blog posts on the term 'foo'. When a BuddyPress component page
like Members is set to the front page, it interferes with this behavior in two
ways: (1) BuddyPress interprets example.com?s=foo as a Members directory
request, and (2) the 's' query arg is interpreted as a Members search term.

We fix this conflict as follows:

  • During the URL parsing process, don't interpret requests of the form example.com?s=foo as being BP component requests, even if a BP component is set to the front page.
  • In order to make BuddyPress component searches continue to work, we change the default search query arguments for each component to be unique. For example, member directory searches look like example.com?members_search=foo. Components register their own 'search_query_arg', and these args can be filtered with the new 'bp_core_get_component_search_query_arg' filter.

Fixes #5087.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-core/bp-core-catchuri.php

    r10108 r10110  
    322322    }
    323323
    324     // Set the current action
    325     $bp->current_action = isset( $bp_uri[$uri_offset + 1] ) ? $bp_uri[$uri_offset + 1] : '';
     324    // Determine the current action.
     325    $current_action = isset( $bp_uri[ $uri_offset + 1 ] ) ? $bp_uri[ $uri_offset + 1 ] : '';
     326
     327    /*
     328     * If a BuddyPress directory is set to the WP front page, URLs like example.com/members/?s=foo
     329     * shouldn't interfere with blog searches.
     330     */
     331    if ( empty( $current_action) && ! empty( $_GET['s'] ) && 'page' == get_option( 'show_on_front' ) && ! empty( $match->id ) ) {
     332        $page_on_front = (int) get_option( 'page_on_front' );
     333        if ( (int) $match->id === $page_on_front ) {
     334            $bp->current_component = '';
     335            return false;
     336        }
     337    }
     338
     339    $bp->current_action = $current_action;
    326340
    327341    // Slice the rest of the $bp_uri array and reset offset
Note: See TracChangeset for help on using the changeset viewer.