以前の質問からの続きです。
bbpress オープンクローズ
bbpressでは、投稿後にトピックをオープン・クローズ設定できるのは管理者だけです。
これをカスタマイズして、トピック投稿者自身がいつでも好きな時に
トピック状態をクローズ・オープンするコードを教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
自己解決
●解決策(1) プラグインを使う
bbpressのオープン・クローズをカスタマイズできるのは、プラグイン『bbp style pack』です。
インストール後に、有効にします。そして以下の手順で設定を変えます。
ダッシュボード⇒設定 ⇒ bbp style pack ⇒ Topic/Reply Display⇒アイテム 17
トピック投稿者自身が、トピック状態(オープン・クローズ)を設定できました。
クローズ後は、誰もトピックへの返信が出来ません。
●解決策(2) プラグイン自体をカスタマイズする
bbp-style-packを部分修正して、コードを作りました。
参考にしたのは、\bbp-style-pack\includes\functions.php
参考コードは、functions.phpファイルの2066-2116行目です。
修正箇所2067-2075行目 プラグインの初期条件を除去
下記コードを、子テーマのfunctions.phpに追加(コピーペースト)しました。
// bbpress トピックのオープン・クローズ機能追加 if (is_user_logged_in()) add_action ( "bbp_theme_before_reply_admin_links", "bsp_topic_close_link" ); function bsp_topic_close_link( $args = '' ) { echo bsp_get_topic_close_link( $args ); } function bsp_get_topic_close_link( $args = '' ) { // Parse arguments against default values $r = bbp_parse_args( $args, array( 'id' => 0, 'link_before' => '', 'link_after' => '', 'sep' => ' | ', 'close_text' => _x( 'Close', 'Topic Status', 'bbpress' ), 'open_text' => _x( 'Open', 'Topic Status', 'bbpress' ) ), 'get_topic_close_link' ); $topic = bbp_get_topic( bbp_get_topic_id( (int) $r['id'] ) ); if ( empty( $topic )) return; //if not a topic but a reply to that topic, then return if (bbp_get_reply_id() != bbp_get_topic_id( (int) $r['id'] ) ) return ; //if participant and not their own topic, then return $role = bbp_get_user_role( get_current_user_id() ); if ($role == 'bbp_participant' ) { //find out if it is their own topic $author_id = bbp_get_topic_author_id( $topic->ID) ; if ($author_id == get_current_user_id()) { $display = bbp_is_topic_open( $topic->ID ) ? $r['close_text'] : $r['open_text']; $uri = add_query_arg( array( 'action' => 'bbp_toggle_topic_close', 'topic_id' => $topic->ID ) ); $uri = wp_nonce_url( $uri, 'close-topic_' . $topic->ID ); $retval = $r['link_before'] . '<a href="' . esc_url( $uri ) . '" class="bbp-topic-close-link">' . $display . '</a>' . $r['link_after']; $retval = '<span class="bbp-admin-links">'.$r['sep'].$retval.'</span>' ; return apply_filters( 'bbp_get_topic_close_link', $retval, $r ); } } else return ; }
●解決策(2)+αの機能追加
トピックを閉じると、トピックページに追記表示する(『トピック受付終了しました。』)以下PHP。
トピック一覧ページで着色する。(『グレー着色』)以下CSS。
下記コードを、子テーマのfunctions.phpに追加(コピーペースト)。
// トピッククローズのお知らせラベル function rk_closed_topics() { if ( bbp_is_topic_closed() && !bbp_is_topic_sticky() ) echo '<span class="closed">[トピック受付終了しました。]</span>'; } add_action( 'bbp_theme_before_topic_title', 'rk_closed_topics' );
上記コードの引用元 bbpress コーデックス
下記コードを、子テーマのstyle.cssに追加
/* トピック終了の文字の色 */ #bbpress-forums span.closed { color: black; } /* (続)閉じたトピック着色 */ #bbpress-forums .status-closed, #bbpress-forums .status-closed a { background-color: gray; content: "トピック終了"; border-radius: 10px; } /* トピックオープン・クローズのリンク着色 */ #bbpress-forums a.bbp-topic-close-link { background: red; border: 5px solid black; border-radius: 20px; margin-bottom: 150px; color:whitesmoke; }
(注意) 全角スペースが入っていて、エラー表示するかも。
投稿2021/01/19 16:11
編集2021/02/10 01:58総合スコア16
0
提示されたコードでどこまで実装出来ているのか、そのコードで権限があるアカウントならオープン/クローズできるのか不明だが。
プラグイン使ったどうだ?
bbResolutions
https://wordpress.org/plugins/bbresolutions/
投稿2021/01/18 03:50
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/01/18 11:31
2021/01/18 12:35 編集
退会済みユーザー
2021/01/18 13:54
2021/01/19 02:09 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。