Search Results for '\"wordpress\"'
-
Search Results
-
I’ve just launched a small forum on my personal blog (custom block theme with light/dark mode), using bbPress plus one small mu-plugin, with no other add-ons: salvatorenoschese.it/community
I know forums aren’t exactly trendy anymore, and most conversations have moved to social networks and chat apps. But I still think they have real value: discussions stay organised, searchable and open to everyone, instead of getting lost in a feed or locked inside a group chat.
A few notes in case they help someone:
- Templates. Out of the box the forum pages didn’t display properly with my block theme: WordPress picked the wrong template and showed excerpts or the wrong content. Making bbPress pages use the theme’s full-width
pagetemplate, and letting the Post Content block print bbPress’s own output, fixed it. - Dark mode.
bbpress.cssuses fixed light colours, so I added a small stylesheet that maps them to the theme’s colour variables. It loads only on forum pages, and bbPress’s CSS isn’t loaded anywhere else. - Roles. Because of some unusual roles on my install, my admin account didn’t have the Keymaster forum role. Assigning it manually fixed it.
- Login. Logging out from the dashboard returned an error because bbPress’s logout filter conflicted with my custom login URL, so I removed that filter. I also replaced bbPress’s login form with links to the standard WordPress login, so all logins go through a single protected form.
- Profiles. The bio field stripped most HTML. I now display it with the same HTML WordPress allows elsewhere.
- Blog ↔ forum. Each blog post automatically gets a closed “showcase” topic in a dedicated forum, with the excerpt, a link to the post and the comment count, while comments stay on the blog. Title, tags and status stay in sync.
- Stats. Instead of
[bbp-stats], I built a small custom box at the bottom of the forum index. It shows topics, replies, members and the latest activity, leaves out the blog-posts forum, and only appears once there’s at least one real discussion. - Small things. Hover effects on mobile, the “Insert link” popup in dark mode, and cache purging (LiteSpeed) needed a few tweaks.
Overall, bbPress works well with block themes once the template part is sorted out. Thanks to the bbPress team for keeping it going!
Topic: I have a couple questions…
Wordpress version 7.1.4
bbPress version 2.6.21
https://fresnoareahomeschoolers.com/forums
I am using Elementor 4.3.6 and my theme is Hello Elementor1. How do I make the “home” link in the breadcrumbs go to the forums homepage instead of the site homepage?
2. I’m using Elementor to build the forums page, and I am trying to figure out how to have the forums list (using the shortcode [bbp-forum-index]) ONLY show on the forums homepage. But not show when you click on an individual forum or category. I know it likely has something to do with the way I’m customizing the forums page in Elementor’s theme builder… I have the page built (so far) like this:

3. How do I remove the “bbPress Forums” text at the top of my forums homepage?
Thank you in advance!
Hello everyone,
I’m planning to create a travel discussion forum where people can share their travel experiences, ask questions, exchange information, and discuss different travel destinations.
I’m particularly interested in creating a community where travelers can discuss tour packages, itineraries, travel permits, transportation, accommodation, preparation tips, and their pilgrimage experiences.
I’m considering using WordPress to build this forum and would like to know whether bbPress would be a good option.
Could anyone guide me on how to get started, organize forum categories, allow users to create topics and replies, and build an active travel community?
Any suggestions or recommendations would be greatly appreciated.
Thank you!
Topic: bbpress 2.6.21 problems
This morning, when updating bbpress to version 2.6.21, you can no longer log in to WordPress. The error appears:
[Tue Nov 03 09:26:00.376137 2026] [proxy_fcgi:error] [pid 7765:tid 140238693312256] [client 81.42.255.90:59938] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function bbp_get_theme_compat_excerpt(), 1 passed in /var/home/DOMAIN/www/wp-includes/class-wp-hook.php on line 353 and exactl and 2 expected in /var/home/DOMAIN/www/wp-content/plugins/bbpress/includes/core/theme-compat.php:491\nStack trace:\n#0 /var/home/DOMAIN/www/wp-includes/class-wp-hook.php(353): bbp_get_theme_compat_excerpt()\n#1 /var/home/DOMAIN/www/wp-includes/plugin.php(206): WP_Hook->apply_filters()\n#2 /var/home/DOMAIN/w ww/wp-content/plugins/js_composer/include/params/vc_grid_item/attributes.php(367): apply_filters()\n#3 /var/home/DOMAIN/www/wp-includes/class-wp-hook.php(353): vc_gitem_template_attribute_post_excerpt()\n#4 /var/home/DOMAIN/www/wp-includes/plugin.php(206): WP_Hook->apply_filters()\n#5 /var/home/DOMAIN/www/wp-content /plugins/js_composer/include/params/vc_grid_item/attributes.php(346): apply_filters()\n#6 /var/home/gr...', referer: https://DOMAIN/wp-login.phpPHP: 7.4 WordPress: 7.1.4 Theme: 2013 WordPressTopic: bbPress 2.6.21 is out!
Hey everyone! bbPress 2.6.21 is out. This is a security and maintenance release, so please update your site when you can. 🙂
This release strengthens access control for private and password-protected forum content and includes fixes across feeds, search, BuddyPress, old-slug redirects, attachments, topic moves, forum freshness, route handling, moderation, and reply administration. It also adds
ugclink relationships and refreshed administration icons.You can read more in the release announcement and upgrade notes. Download bbPress 2.6.21 from WordPress.org, or update right from your WordPress dashboard.
Thanks to everyone who reported issues, contributed patches, reviewed changes, and tested this release!
Deleting a single reply takes 30–45 s on a large forum (unindexable
meta_valuelookups)Summary
On a board with ~573,000 replies, permanently deleting one reply from
wp-admin/edit.php?post_status=trash&post_type=replytakes 42 seconds, and the web server returns a 500 before the request finishes:[fastcgi:error] FastCGI: comm with server ".../php8.3.0.fcgi" aborted: idle timeout (30 sec), referer: .../wp-admin/edit.php?post_status=trash&post_type=reply [fastcgi:error] FastCGI: incomplete headers (0 bytes) received from server ".../php8.3.0.fcgi"The delete itself does go through, so the admin is left with an error screen and no way to tell
whether it worked.Two separate queries are responsible. Both filter
wp_postmeta.meta_value, which has
no index in the WordPress schema, so both degrade linearly with the size of the board.Environment
- bbPress 2.6.20
- WordPress 7.1.3
- PHP 8.3
- MySQL 5.7.39 (InnoDB)
- Content: 47 forums (1
hidden), 1,391 topics, 572,724 published replies wp_postmeta: 2,395,731 rows; 574,165 of them_bbp_forum_id, 574,117_bbp_topic_id- Object cache: none (database-backed transients only)
How to reproduce
- Import or generate a board with a few hundred thousand replies.
- Trash a reply, then delete it permanently from the trash list.
- Watch the request time, or profile with
SAVEQUERIES.
Measured with
SAVEQUERIESaround a barewp_delete_post( $reply_id, true )
on the CLI, with no HTTP layer involved: 42.35 s, 183 queries.Cause 1 —
bbp_get_child_counts()scans every row of a meta keyIn
includes/common/functions.php,bbp_get_child_counts()(since 2.6.0,
r6827) runs:SELECT p.post_type AS type, p.post_status AS status, COUNT( * ) AS count FROM wp_posts AS p LEFT JOIN wp_postmeta AS pm ON p.ID = pm.post_id AND pm.meta_key = '_bbp_forum_id' WHERE pm.meta_value = '154459' GROUP BY p.post_status, p.post_typeBecause the
WHEREclause rejects NULLs, MySQL turns theLEFT JOINinto
an inner join and drives fromwp_postmeta. The only usable index is
meta_key, so it walks every row of that key and checks
meta_valuerow by row:EXPLAIN (without an extra index) table: pm type: ref key: meta_key key_len: 767 ref: const rows: 1127050 filtered: 10.00 Extra: Using where; Using temporary; Using filesortDeleting one reply calls this five times — once for the topic and once for each of the four
ancestor forums — at 3.2–4.9 s each:_bbp_topic_id:155815 3.88 s _bbp_forum_id:154457 3.63 s _bbp_forum_id:154458 4.56 s _bbp_forum_id:154459 4.86 s _bbp_forum_id:154460 3.18 sThe cache inside the function does not help: its key contains
wp_cache_get_last_changed( 'bbpress_posts' ), and the delete keeps modifying posts, so
every call after the first invalidation is a fresh query.Cause 2 — the hidden-forum exclusion adds a
CAST()that no index can servebbp_forum_query_last_reply_id()builds a deliberately leanWP_Query
(suppress_filters => true, no meta query). Butpre_get_postsstill runs,
andbbp_pre_get_posts_normalize_forum_visibility()injects
bbp_exclude_forum_ids( 'meta_query' )because the board has one hidden forum. The
result:SELECT wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE wp_posts.post_parent IN ( ...32 topic ids... ) AND ( wp_postmeta.meta_key = '_bbp_forum_id' AND CAST( wp_postmeta.meta_value AS SIGNED ) NOT IN ('154499') ) AND wp_posts.post_type = 'reply' AND wp_posts.post_status = 'publish' GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC, wp_posts.ID DESC LIMIT 0, 1The meta query is built with
'type' => 'NUMERIC'and
'compare' => 'NOT IN'(includes/forums/functions.php, around line 2806).
CAST( meta_value AS SIGNED )makes the predicate non-sargable, so no index on
meta_valuecan ever be used, andNOT INon a single hidden forum forces a
full join against the 574k_bbp_forum_idrows. Four of these run per delete,
0.7–2.8 s each.Note the shape of the exclusion: it asks “is this reply not in the one
hidden forum”, which has to touch every reply, instead of “is this reply in one of the 46
visible forums” or, simpler, instead of filtering by the forum ids the caller already knows.Workaround we are using
A composite index on
wp_postmeta:ALTER TABLE wp_postmeta ADD INDEX tq_key_value ( meta_key(32), meta_value(32) ); EXPLAIN (with the index) table: pm type: ref key: tq_key_value key_len: 262 ref: const,const rows: 966 filtered: 100.00Estimated rows for cause 1 drop from 1,127,050 to 966, the five child-count queries go from ~20 s
to 0.40 s in total, and the whole delete goes from 42.35 s to about
5 s — under the web server timeout, so the 500 is gone.The index does nothing for cause 2: the
CAST()still blocks it. Those queries are
what the remaining ~4.5 s is made of.Suggested fixes
bbp_get_child_counts()should not filter onmeta_value.
The same numbers are available from indexed columns: replies of a topic are
post_parent = <topic>, and topics of a forum are
post_parent = <forum>, so a forum’s reply count is one join over
post_parent(which is indexed) instead of a meta scan. If the meta lookup has
to stay for sub-forum aggregation, bbPress could create its own index on
(meta_key, meta_value)at activation, the way it already creates its other schema.- Drop the
CAST()frombbp_exclude_forum_ids( 'meta_query' ).
With'type' => 'NUMERIC'removed — meta ids are stored as plain digit strings
— the predicate becomes sargable and an index can serve it. - Prefer the positive form of the visibility filter.
meta_value IN (<visible forum ids>)is selective;
NOT IN (<hidden forum ids>)matches almost every row on the board. - Respect
suppress_filters, or add an opt-out for the maintenance path.
The recount queries run on ids bbPress already trusts; putting them through the public visibility
normalisation is both slow and pointless.
Happy to test a patch against this dataset.
Topic: bbPress 2.6.20 is out!
Hey everyone! bbPress 2.6.20 is out. This is a security and maintenance release, so please update your site when you can. 🙂
This release strengthens password handling, adds a site-wide Open, Closed, or Frozen Forum Status setting, and fixes issues across BuddyPress, moderation forms, subscriptions, notifications, converters, widgets, profiles, and topic and reply administration.
You can read more in the release announcement and upgrade notes. Download bbPress 2.6.20 from WordPress.org, or update right from your WordPress dashboard.
Thanks to everyone who reported issues, contributed patches, reviewed changes, and tested this release!
bbp_get_reply_class()passes the booleantrueas the topic ID when it asks for the reply position. It only works becausebbp_get_topic_id()ignores a non-numeric value and falls back to the topic of the current loop. Outside a topic’s own reply loop, that fallback can be a different topic, and the position is looked up in the wrong one.Environment
- bbPress 2.6.19
- WordPress 7.1.2
- PHP 8.2
Where
includes/replies/template.php, line 2365:$reply_pos = bbp_get_reply_position( $reply_id, true );
The signature is
bbp_get_reply_position( $reply_id = 0, $topic_id = 0 ). Two lines above, the function already has the correct value:$topic_id = bbp_get_reply_topic_id( $reply_id );
What happens
For a reply whose
menu_orderis still 0 (position never stored),bbp_get_reply_position()callsbbp_get_topic_id( true ).trueis not numeric, sobbp_get_topic_id()goes through its fallbacks: the topic loop, the search loop, the current single topic, and so on.- In a topic’s own reply loop this happens to be the right topic, so the bug is hidden.
- When replies of one topic are listed while another topic is the current one, for example a list of replies rendered on a single topic page, the position is computed with
bbp_get_reply_position_raw()against the wrong topic. The reply is not among that topic’s children, so the position is 0. It is not stored, and the same query runs again on the next call.
The visible result is a wrong
bbp-reply-position-Nclass, plus a wasted child-ID query, which on a large topic loads every reply ID of that topic.Suggested fix
$reply_pos = bbp_get_reply_position( $reply_id, $topic_id );
The Akismet integration reports the wrong post count for any author with 1,000 or more posts. The formatted count (for example
'1,309') is cast toint, which gives1. Akismet then receives an experienced member as someone with a single post.Environment
- bbPress 2.6.19
- WordPress 7.1.2
- PHP 8.2
Where
BBP_Akismet::check_post()inincludes/extend/akismet.php, line 115:$user_data['total_posts'] = (int) bbp_get_user_post_count( $post_data['post_author'] );
The value is then sent to Akismet as
comment_total(line 162).Cause
Without the second argument (
$integer = true),bbp_get_user_post_count()runs through thebbp_get_user_post_countfilter.bbp_number_formatis hooked to that filter inincludes/core/filters.php(line 267), so the function returns a formatted string. Casting that string tointstops at the thousands separator:(int) '1,309' // 1 (int) '12,045' // 12
With a locale that uses a space or a non-breaking space as the separator, the result is the same.
Impact
Every new topic or reply from an author with 1,000+ posts is checked by Akismet with a post total of 1–999 instead of the real number. The real number is the part of the user history that most separates a long-standing member from a fresh spam account, so the most active members are the ones most likely to be judged worse than they should be. There is no error or notice; the value is just wrong.
Steps to reproduce
- Activate Akismet, so bbPress loads its integration.
- Use an account whose
_bbp_reply_count+_bbp_topic_countuser meta add up to 1,000 or more. - Post a reply and inspect the request sent to Akismet (for example via the
bbp_akismet_check_postfilter):comment_totalis the digits before the first separator, not the real count.
Suggested fix
$user_data['total_posts'] = bbp_get_user_post_count( $post_data['post_author'], true );
The
(int)cast is then unnecessary, since the_intfilter path already returns an integer.Opening a topic for editing in wp-admin (
post.php?post=ID&action=edit) fails with a fatal error if the topic has 1,000 or more replies. The “Replies” meta box does not render, and the rest of the edit screen is cut off at that point.Environment
- bbPress 2.6.19
- WordPress 7.1.2
- PHP 8.2
Error
Uncaught TypeError: number_format(): Argument #1 ($num) must be of type int|float, string given in wp-includes/functions.php:428 #0 number_format('2,503', 0, ',', ' ') wp-includes/functions.php:428 #1 number_format_i18n('2,503') wp-admin/includes/class-wp-list-table.php:1051 #2 WP_List_Table->pagination('top') bbpress/includes/admin/classes/class-bbp-topic-replies-list-table.php:314 #3 BBP_Topic_Replies_List_Table->display_tablenav('top') ...:272 #4 BBP_Topic_Replies_List_Table->display() bbpress/includes/admin/metaboxes.php:641 #5 bbp_topic_replies_metabox(WP_Post, array)Cause
In
BBP_Topic_Replies_List_Table::prepare_items()(includes/admin/classes/class-bbp-topic-replies-list-table.php, around line 237), the total is read without the$integerflag:$total_items = bbp_get_topic_reply_count( $topic_id );
Without
$integer = true, the value passes through thebbp_get_topic_reply_countfilter.bbp_number_formatis hooked to that filter inincludes/core/filters.php, so it returns a formatted string such as'2,503'. That string then goes intoset_pagination_args():WP_List_Table::pagination()callsnumber_format_i18n( $total_items ). On PHP 8 this throws aTypeErrorfor a non-numeric string.ceil( $total_items / $per_page )is also wrong.'2,503' / 5is evaluated as2 / 5, sototal_pageswould be 1 even on PHP 7.
Topics with fewer than 1,000 replies are not affected, because their counts have no thousands separator.
Steps to reproduce
- On PHP 8.x, have a topic with 1,000 or more replies (
_bbp_reply_count≥ 1000). - Open that topic in wp-admin → Topics → Edit.
- The “Replies” meta box shows the fatal error above.
Suggested fix
Request the integer count:
$total_items = bbp_get_topic_reply_count( $topic_id, true );
Workaround (until fixed; restricted to the topic edit screen):
add_action( 'load-post.php', function () { if ( ( $GLOBALS['typenow'] ?? '' ) !== bbp_get_topic_post_type() ) { return; } // Runs after bbp_number_format (priority 10) and strips the separator. add_filter( 'bbp_get_topic_reply_count', function ( $count ) { return (int) preg_replace( '/\D+/', '', (string) $count ); }, 20 ); } );Topic: bbPress 2.6.19 is out!
Hey everyone! bbPress 2.6.19 is out. This is a security and maintenance release, so if you’re running bbPress, please update your site when you can. Sooner is better. 🙂
Much of the work in this release makes sure private and password-protected forum content stays where it belongs. We also tightened a few moderation and forum-role checks and fixed issues with BuddyPress, imports, emails, and reply positioning.
You can read more in the release announcement and upgrade notes. Download bbPress 2.6.19 from WordPress.org, or update right from your WordPress dashboard.
Thanks to thewindghost, ngonhuy, and moltenbit for responsibly reporting issues, and to everyone who helped review and test this release!
Introducing Aurora bbPress 1.0!
Aurora is a modern forum template plugin developed by CodeLinSoft to completely redesign the appearance and user experience of bbPress without replacing your existing WordPress theme.
Designed with a clean, elegant, and responsive interface, Aurora makes it easier to discover discussions, interact with other members, and build an engaging online community.
MAIN FEATURES
• Modern, responsive interface for desktop, tablet, and mobile.
• Redesigned homepage with forum categories, community statistics, and active members.
• Dedicated recent discussions page with search, filters, and topic previews.
• Modern topic layouts with author information, discussion statistics, and an interactive timeline.
• SCEditor WYSIWYG editor with XHTML support.
• Integrated image and file attachments.
• Customizable user profiles with avatars and cover images.
• Configurable discussion badges and member rankings.
• Automatic topic subscriptions and notifications with an unread counter and dropdown.
• Customization options available directly from WordPress Admin.
• Multilingual interface with 12 included languages.
COMPATIBILITY
Aurora works as an independent WordPress plugin, preserving the underlying bbPress discussion system and your existing WordPress theme.
Version: 1.0
WordPress: 6.4 or later
PHP: 7.4 or later
Requires: bbPress
License: CodeLinSoft Proprietary License
DISCOVER AURORA
Explore its features, view the interface previews, and get the plugin from the official website:
Aurora bbPress – Official Product Page
Feedback, suggestions, and feature requests are welcome!
Developed by CodeLinSoft.
Topic: bbPress 2.6.17 is out!
bbPress 2.6.17 is a security and maintenance release that improves permissions, private content handling, subscription notifications, moderation workflows, and forum counts. Everyone running bbPress should update as soon as possible.
Read the release announcement and get bbPress 2.6.17 from WordPress.org.
- Templates. Out of the box the forum pages didn’t display properly with my block theme: WordPress picked the wrong template and showed excerpts or the wrong content. Making bbPress pages use the theme’s full-width