bbPressで特定フォーラムのトピックが別フォーラムにも固定表示される主因は、そのトピックが「Sticky」ではなく「Super Sticky」になっていることです。Stickyは所属フォーラムの上部だけ、Super Stickyはサイト内すべてのフォーラム上部が対象です。削除や再投稿はせず、WordPress管理画面の「トピック」から対象を編集し、Topic AttributesのTypeをNormalまたはStickyへ変更します。
「上部固定」という日本語だけでは範囲を判断できません。bbPressの実際の状態はNormal/Sticky/Super Stickyの三つで確認し、別フォーラムにも出るならまずSuper Stickyを疑います。
StickyとSuper Stickyの違い
- Normal:通常トピック。固定領域には置かれず、フォーラムの並び順に従う。
- Sticky:そのトピックが所属する一つのフォーラムで上部へ固定される。別フォーラムには固定トピックとして挿入されない。
- Super Sticky:サイト内の全フォーラム上部へ固定される。全体告知向けで、誤選択すると「フォーラムを分けたのに同じトピックが全部へ出る」ように見える。
bbPress公式Codexは、Stickyを「そのフォーラムの先頭」、Super Stickyを「すべてのフォーラムの先頭」と説明しています。公式ソース側でも、編集値の stick は bbp_stick_topic($topic_id)、super は第2引数をtrueにした処理、unstick は bbp_unstick_topic($topic_id) へ分岐し、処理前に current_user_can('moderate', $topic_id) を確認します。これは表示テーマの呼び方ではなくbbPress本体の状態差です。
変更前に対象を特定する
まず対象トピックのURL、投稿ID、タイトル、所属フォーラム、現在のTypeを記録します。同名トピックや複製があるサイトではタイトルだけで選ばず、URLのIDとParent Forumを照合します。ログアウト状態で所属フォーラム、別フォーラム、フォーラムトップを開き、どの画面で固定されているかも保存します。
- 一つのトピックURLが複数フォーラムに現れる:Super Stickyの典型。
- 別々のURLや投稿IDが同じ題名で現れる:複製、インポート、ショートコードの可能性があり、Type変更だけでは解決しない。
- 管理画面ではNormalだが公開側に残る:ページ/CDN/オブジェクトキャッシュ、テーマのbbPressテンプレート上書き、一覧系アドオンを切り分ける。
- サブフォーラム一覧がトピックより上に表示される:Stickyの種類とは別のテンプレート構造であり、表示位置だけでSuper Stickyと断定しない。
管理画面から安全に解除する
- WordPressへ、対象トピックをモデレートできるForum Moderatorまたは必要な権限を持つ管理者でログインする。
- 左メニューの「トピック(Topics)」→「すべてのトピック(All Topics)」を開く。
- 検索結果から対象を開き、投稿ID、タイトル、Parent Forumが記録と一致することを確認する。
- 編集画面右側の「Topic Attributes(トピック属性)」にある「Type」を確認する。日本語化により「種類」「トピックタイプ」と表示される場合がある。
- 全フォーラムから固定を外すだけで所属フォーラムでは残したいならSuper StickyからStickyへ変更する。固定自体が不要ならNormalへ変更する。
- 「更新」を押し、保存完了メッセージを確認する。トピックの本文、Status、Forum、投稿者は変更しない。
一覧画面に行アクションの「Stick」と「(To Front)」がある版では、Stickがフォーラム内固定、(To Front)がSuper Stickyです。解除リンクが表示されている場合も、どの状態から解除するのかを確認してからクリックします。編集画面のTypeで三値を目視して保存する方が、翻訳が曖昧な環境では誤操作を減らせます。
フロントエンドの実際の経路
テーマがbbPressのモデレーターリンクを表示している場合、ログインして対象トピックを開き、「Edit」でTopic Status/TypeをNormal、Sticky、Super Stickyから変更できます。また公式CodexのCommon Tasksでは、トピック上の「Stick」リンクで所属フォーラムへ固定し、「(To Front)」で全フォーラムへSuper Stickyにすると説明しています。一般参加者には通常この管理リンクは見えません。
リンクが無いからといって管理者権限を全員へ付けないでください。bbPressソースはsticky処理にmoderate capabilityを要求します。対象サイトのForum Roleとカスタム権限を確認し、掲示板運用者に必要な範囲だけ委任します。WordPressのAdministratorを共有アカウント化するのは避けます。
変更直後の安全な検証
- プライベートブラウズまたはログアウト状態で、対象トピックのパーマリンクが従来どおり開き、返信数、購読、お気に入り、投稿者、更新日時が維持されていることを確認する。
- 所属フォーラムを開く。Stickyへ変更した場合は上部に一件だけ、Normalへ変更した場合は通常順に現れることを確認する。
- 所属しない別フォーラムを最低二つ開き、対象トピックが固定領域から消えたことを確認する。
- フォーラムトップ、最近のトピック、検索、ウィジェット、ショートコード一覧を確認し、「全フォーラム固定」と「最近のトピック一覧への掲載」を混同しない。
- 他のSuper Sticky告知を一件確認し、その告知まで解除されていないことを確かめる。
キャッシュを使うサイトでは、まず対象フォーラムURLとフォーラム一覧のページキャッシュだけを失効させます。全キャッシュ削除で一時的に直ったように見せず、ログイン中とログアウト中、CDN経由とオリジン側を比較します。データベースを直接書き換える必要はありません。
Normalにしても残る場合
キャッシュとテーマ
管理画面のTypeがNormalで、別フォーラムに同じ投稿IDが残るなら、ページキャッシュ、オブジェクトキャッシュ、CDNの順に対象URLを確認します。ステージングで標準的なWordPressテーマへ切り替え、子テーマ内のbbPressテンプレートや bbp_has_topics の引数変更が原因か比較します。本番テーマをその場で直接編集しません。
プラグイン、ショートコード、複製
最近のトピック、注目投稿、告知を挿入するアドオンは、固定状態とは別に全フォーラムへ同じリンクを表示できます。HTML上のトピックURLと投稿IDを比較し、別IDならインポートや複製を調べます。ステージングで一覧系プラグインを一つずつ無効化し、原因が分かったら設定またはテンプレートを修正します。セキュリティやバックアップを含む全プラグインを本番で一括停止しません。
ロールバック
意図した告知まで消えた場合は、記録した同じ投稿IDを編集し、元のTypeへ戻して更新します。元がSuper StickyならSuper Sticky、元がStickyならStickyへ正確に戻します。その後、所属フォーラムと別フォーラムで再確認します。削除して作り直すとパーマリンク、返信、購読、お気に入り、検索評価が変わるため、Typeの復元だけで戻します。
誤設定が繰り返される場合は、Super Stickyを使えるForum Roleを限定し、全体告知には終了日と解除担当を運用メモへ残します。月次でSuper Sticky一覧をログアウト表示から確認し、期限を過ぎたものをNormalまたはStickyへ戻します。

コメント