Skip to:
Content

bbPress.org


Ignore:
Timestamp:
05/07/2026 08:49:10 PM (3 weeks ago)
Author:
johnjamesjacoby
Message:

Component - Forums: Improve forum visibility exclusion.

This commit updates forum visibility query normalization so mixed post-type queries are handled as intended, exclusion IDs are consistently normalized, and generated meta query clauses are more consistent.

Changes include:

  • Use array_intersect() to detect whether a bbPress post type is in the post_type query var
  • Use NOT IN with an array value for meta_query exclusions, and let the query optimizer do its thing
  • Normalize only once per WP_Query via a dedicated query var
  • Normalize post__not_in values with wp_parse_id_list()
  • Validate filtered meta_query shape before appending to existing meta clauses

In trunk, for 2.7.

See #3668.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/includes/forums/functions.php

    r7380 r7403  
    22932293        if ( ! empty( $forum_ids ) ) {
    22942294
    2295             // Comparison
    2296             $compare = ( 1 < count( $forum_ids ) )
    2297                 ? 'NOT IN'
    2298                 : '!=';
    2299 
    23002295            // Setup types
    23012296            $types['array']      = $forum_ids;
     
    23032298            $types['meta_query'] = array(
    23042299                'key'     => '_bbp_forum_id',
    2305                 'value'   => $types['string'],
     2300                'value'   => $forum_ids,
    23062301                'type'    => 'NUMERIC',
    2307                 'compare' => $compare
     2302                'compare' => 'NOT IN'
    23082303            );
    23092304        }
     
    23582353
    23592354    // Compare queried post-types to supported post-types
    2360     $bbp_post_types = array_diff( $post_types, bbp_get_post_types() );
    2361 
    2362     // Bail if not a bbPress post type
    2363     if ( ! empty( $bbp_post_types ) ) {
    2364         return;
    2365     }
     2355    $bbp_post_types = array_intersect( $post_types, bbp_get_post_types() );
     2356
     2357    // Bail if no bbPress post type is being queried
     2358    if ( empty( $bbp_post_types ) ) {
     2359        return;
     2360    }
     2361
     2362    // Bail if this query has already been normalized
     2363    if ( $posts_query->get( '_bbp_forum_visibility_normalized' ) ) {
     2364        return;
     2365    }
     2366
     2367    // Mark this query as normalized
     2368    $posts_query->set( '_bbp_forum_visibility_normalized', true );
    23662369
    23672370    // Forums
     
    23812384
    23822385            // Add our not-in to existing
    2383             $not_in = array_unique( array_merge( $not_in, $forum_ids ) );
     2386            $not_in = wp_parse_id_list( array_merge( $not_in, $forum_ids ) );
    23842387
    23852388            // Set the new not-in val
     
    23892392
    23902393    // Get forums to exclude
    2391     $forum_ids = bbp_exclude_forum_ids( 'meta_query' );
     2394    $forum_meta_query = bbp_exclude_forum_ids( 'meta_query' );
    23922395
    23932396    // Excluding some forums
    2394     if ( ! empty( $forum_ids ) ) {
     2397    if ( is_array( $forum_meta_query ) && ! empty( $forum_meta_query['key'] ) && ! empty( $forum_meta_query['value'] ) ) {
    23952398
    23962399        // Get any existing meta queries
     
    23982401
    23992402        // Add our meta query to existing
    2400         $meta_query[] = $forum_ids;
     2403        $meta_query[] = $forum_meta_query;
    24012404
    24022405        // Set the new meta_query val
Note: See TracChangeset for help on using the changeset viewer.