BBP_Forums_Widget
Forums Forum Widget
Description
Adds a widget which displays the forum list
Source
File: bp-forums/common/widgets.php
class BBP_Forums_Widget extends WP_Widget { /** * Forums Forum Widget * * Registers the forum widget * * @since bbPress (r2653) * * @uses apply_filters() Calls 'bbp_forums_widget_options' with the * widget options */ public function __construct() { $widget_ops = apply_filters( 'bbp_forums_widget_options', array( 'classname' => 'widget_display_forums', 'description' => __( 'A list of forums with an option to set the parent.', 'buddyboss' ) ) ); parent::__construct( false, __( '(BB) Forums List', 'buddyboss' ), $widget_ops ); } /** * Register the widget * * @since bbPress (r3389) * * @uses register_widget() */ public static function register_widget() { register_widget( 'BBP_Forums_Widget' ); } /** * Displays the output, the forum list * * @since bbPress (r2653) * * @param mixed $args Arguments * @param array $instance Instance * @uses apply_filters() Calls 'bbp_forum_widget_title' with the title * @uses get_option() To get the forums per page option * @uses current_user_can() To check if the current user can read * private() To resety name * @uses bbp_has_forums() The main forum loop * @uses bbp_forums() To check whether there are more forums available * in the loop * @uses bbp_the_forum() Loads up the current forum in the loop * @uses bbp_forum_permalink() To display the forum permalink * @uses bbp_forum_title() To display the forum title */ public function widget( $args, $instance ) { // Get widget settings $settings = $this->parse_settings( $instance ); // Typical WordPress filter $settings['title'] = apply_filters( 'widget_title', $settings['title'], $instance, $this->id_base ); // Forums filter $settings['title'] = apply_filters( 'bbp_forum_widget_title', $settings['title'], $instance, $this->id_base ); // Note: private and hidden forums will be excluded via the // bbp_pre_get_posts_normalize_forum_visibility action and function. $widget_query = new WP_Query( array( 'post_type' => bbp_get_forum_post_type(), //'post_parent' => $settings['parent_forum'], 'post_parent' => 0, 'post_status' => bbp_get_public_status_id(), 'posts_per_page' => bbp_get_forums_per_page(), 'ignore_sticky_posts' => true, 'no_found_rows' => true, 'orderby' => 'menu_order title', 'order' => 'ASC' ) ); // Bail if no posts if ( ! $widget_query->have_posts() ) { return; } echo $args['before_widget']; if ( !empty( $settings['title'] ) ) { echo $args['before_title'] . $settings['title'] . $args['after_title']; } ?> <ul class="bb-sidebar-forums"> <?php while ( $widget_query->have_posts() ) : $widget_query->the_post(); ?> <li> <a class="bbp-forum-title" href="<?php bbp_forum_permalink( $widget_query->post->ID ); ?>"><?php bbp_forum_title( $widget_query->post->ID ); ?></a> <span class="topics-count"> <?php $topics_count = bbp_get_forum_topic_count( $widget_query->post->ID ); echo $topics_count; ?> </span> <?php $r = array( 'before' => '<ul class="bb-sidebar-forums">', 'after' => '</ul>', 'link_before' => '<li class="bbp-sub-forum">', 'link_after' => '</li>', 'count_before' => ' (', 'count_after' => ')', 'count_sep' => ', ', 'separator' => ' ', 'forum_id' => $widget_query->post->ID, 'show_topic_count' => false, 'show_reply_count' => false, ); bbp_list_forums($r); ?> </li> <?php endwhile; ?> </ul> <?php echo $args['after_widget']; // Reset the $post global wp_reset_postdata(); } /** * Update the forum widget options * * @since bbPress (r2653) * * @param array $new_instance The new instance options * @param array $old_instance The old instance options */ public function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance['title'] = strip_tags( $new_instance['title'] ); $instance['parent_forum'] = sanitize_text_field( $new_instance['parent_forum'] ); // Force to any if ( !empty( $instance['parent_forum'] ) && !is_numeric( $instance['parent_forum'] ) ) { $instance['parent_forum'] = 'any'; } return $instance; } /** * Output the forum widget options form * * @since bbPress (r2653) * * @param $instance Instance * @uses BBP_Forums_Widget::get_field_id() To output the field id * @uses BBP_Forums_Widget::get_field_name() To output the field name */ public function form( $instance ) { // Get widget settings $settings = $this->parse_settings( $instance ); ?> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'buddyboss' ); ?> <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $settings['title'] ); ?>" /> </label> </p> <p> <label for="<?php echo $this->get_field_id( 'parent_forum' ); ?>"><?php _e( 'Parent Forum ID:', 'buddyboss' ); ?> <input class="widefat" id="<?php echo $this->get_field_id( 'parent_forum' ); ?>" name="<?php echo $this->get_field_name( 'parent_forum' ); ?>" type="text" value="<?php echo esc_attr( $settings['parent_forum'] ); ?>" /> </label> <br /> <small><?php _e( '"0" to show only root - "any" to show all', 'buddyboss' ); ?></small> </p> <?php } /** * Merge the widget settings into defaults array. * * @since bbPress (r4802) * * @param $instance Instance * @uses bbp_parse_args() To merge widget settings into defaults */ public function parse_settings( $instance = array() ) { return bbp_parse_args( $instance, array( 'title' => __( 'Forums', 'buddyboss' ), 'parent_forum' => 0 ), 'forum_widget_settings' ); } }
Changelog
Version | Description |
---|---|
bbPress (r2653) | Introduced. |
Methods
- __construct — Forums Forum Widget
- form — Output the forum widget options form
- parse_settings — Merge the widget settings into defaults array.
- register_widget — Register the widget
- update — Update the forum widget options
- widget — Displays the output, the forum list
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.