Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*
- Plugin Name: Forum Display
- Plugin URI: http://thehost.ninja/
- Description: This plugin adds a custom widget.
- Version: 1.0
- Author: Modified by Jason Cook/Written by bbPress
- Author URI: http://bbpress.org/
- License: GPL2
- */
- // Exit if accessed directly
- if ( !defined( 'ABSPATH' ) ) exit;
- // The widget class
- /**
- * bbPress Forum Widget
- *
- * Adds a widget which displays the forum list
- *
- * @since bbPress (r2653)
- *
- * @uses WP_Widget
- */
- class forumdisplay_widget extends WP_Widget {
- /**
- * bbPress 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( 'forumdisplay_widget_options', array(
- 'classname' => 'widget_display_forums',
- 'description' => __( 'A list of forums with an option to set the parent.', 'bbpress' )
- ) );
- parent::__construct( false, __( 'Forum Display', 'bbpress' ), $widget_ops );
- }
- /**
- * Register the widget
- *
- * @since bbPress (r3389)
- *
- * @uses register_widget()
- */
- public static function register_widget() {
- register_widget( 'forumdisplay_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 );
- // bbPress filter
- $settings['title'] = apply_filters( 'forumdisplay_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_status' => bbp_get_public_status_id(),
- 'posts_per_page' => get_option( '_bbp_forums_per_page', 50 ),
- '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>
- <?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></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:', 'bbpress' ); ?>
- <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:', 'bbpress' ); ?>
- <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', 'bbpress' ); ?></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', 'bbpress' ),
- 'parent_forum' => 0
- ), 'forum_widget_settings' );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement