Skip to:
Content

bbPress.org

Ticket #2915: 2915.diff

File 2915.diff, 3.7 KB (added by tharsheblows, 6 years ago)

run through chunked topic_id arrays

  • src/includes/forums/functions.php

     
    16491649
    16501650        // Don't count replies if the forum is a category
    16511651        $reply_count = 0;
    1652         $topic_ids   = bbp_forum_query_topic_ids( $forum_id );
    1653         if ( ! empty( $topic_ids ) ) {
    1654                 $query = new WP_Query( array(
    1655                         'fields'          => 'ids',
    1656                         'post_parent__in' => $topic_ids,
    1657                         'post_status'     => bbp_get_public_status_id(),
    1658                         'post_type'       => bbp_get_reply_post_type(),
     1652        $all_topic_ids   = bbp_forum_query_topic_ids( $forum_id );
    16591653
    1660                         // Maybe change these later
    1661                         'posts_per_page'         => -1,
    1662                         'update_post_term_cache' => false,
    1663                         'update_post_meta_cache' => false,
    1664                         'ignore_sticky_posts'    => true,
    1665                 ) );
    1666                 $reply_count = ! empty( $query->posts ) ? count( $query->posts ) : 0;
    1667                 unset( $query );
     1654        $topic_ids_chunks = array_chunk( $all_topic_ids, 1000 );
     1655
     1656
     1657        foreach( $topic_ids_chunks as $topic_ids ){
     1658
     1659                $chunk_reply_count = 0;
     1660                if ( ! empty( $topic_ids ) ) {
     1661                        $query = new WP_Query( array(
     1662                                'fields'          => 'ids',
     1663                                'post_parent__in' => $topic_ids,
     1664                                'post_status'     => bbp_get_public_status_id(),
     1665                                'post_type'       => bbp_get_reply_post_type(),
     1666       
     1667                                // Maybe change these later
     1668                                'posts_per_page'         => -1,
     1669                                'update_post_term_cache' => false,
     1670                                'update_post_meta_cache' => false,
     1671                                'ignore_sticky_posts'    => true,
     1672                        ) );
     1673                        $chunk_reply_count = ! empty( $query->posts ) ? count( $query->posts ) : 0;
     1674                        $reply_count += $chunk_reply_count;
     1675                        unset( $query );
     1676                }
    16681677        }
    16691678
    16701679        // Calculate total replies in this forum
     
    21072116 * @uses apply_filters() Calls 'bbp_forum_query_last_reply_id' with the reply id
    21082117 *                        and forum id
    21092118 */
    2110 function bbp_forum_query_last_reply_id( $forum_id = 0, $topic_ids = 0 ) {
     2119function bbp_forum_query_last_reply_id( $forum_id = 0, $all_topic_ids = 0 ) {
    21112120
    21122121        // Validate forum
    21132122        $forum_id = bbp_get_forum_id( $forum_id );
     2123        $last_reply_id = 0;
    21142124
    21152125        // Get topic ID's if none were passed
    2116         if ( empty( $topic_ids ) ) {
    2117                 $topic_ids = bbp_forum_query_topic_ids( $forum_id );
     2126        if ( empty( $all_topic_ids ) ) {
     2127                $all_topic_ids = bbp_forum_query_topic_ids( $forum_id );
    21182128        }
    21192129
    2120         $query = new WP_Query( array(
    2121                 'fields'          => 'ids',
    2122                 'post_parent__in' => $topic_ids,
    2123                 'post_status'     => bbp_get_public_status_id(),
    2124                 'post_type'       => bbp_get_reply_post_type(),
     2130        $topic_ids_chunks = array_chunk( $all_topic_ids, 1000 );
    21252131
    2126                 // Maybe change these later
    2127                 'posts_per_page'         => 1,
    2128                 'update_post_term_cache' => false,
    2129                 'update_post_meta_cache' => false,
    2130                 'ignore_sticky_posts'    => true,
    2131         ) );
    2132         $reply_id = array_shift( $query->posts );
    2133         unset( $query );
     2132        foreach( $topic_ids_chunks as $topic_ids ){
     2133                $query = new WP_Query( array(
     2134                        'fields'          => 'ids',
     2135                        'post_parent__in' => $topic_ids,
     2136                        'post_status'     => bbp_get_public_status_id(),
     2137                        'post_type'       => bbp_get_reply_post_type(),
     2138       
     2139                        // Maybe change these later
     2140                        'posts_per_page'         => 1,
     2141                        'update_post_term_cache' => false,
     2142                        'update_post_meta_cache' => false,
     2143                        'ignore_sticky_posts'    => true,
     2144                ) );
     2145                $chunk_reply_id = array_shift( $query->posts );
     2146                $last_reply_id = ( $chunk_reply_id > $last_reply_id ) ? $chunk_reply_id : $last_reply_id; // @todo fix ID / date conflation
    21342147
    2135         return (int) apply_filters( 'bbp_forum_query_last_reply_id', $reply_id, $forum_id );
     2148                unset( $query );
     2149        }
     2150
     2151        return (int) apply_filters( 'bbp_forum_query_last_reply_id', $last_reply_id, $forum_id );
    21362152}
    21372153
    21382154/** Listeners *****************************************************************/