* @copyright Copyright (c) 2008 - 2014, Justin Tadlock * @link http://themehybrid.com/hybrid-core * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html */ /** * Bookmarks Widget Class * * @since 0.6.0 */ class Hybrid_Widget_Bookmarks extends WP_Widget { /** * Default arguments for the widget settings. * * @since 2.0.0 * @access public * @var array */ public $defaults = array(); /** * Set up the widget's unique name, ID, class, description, and other options. * * @since 1.2.0 * @access public * @return void */ function __construct() { /* Set up the widget options. */ $widget_options = array( 'classname' => 'widget-bookmarks widget_links', 'description' => esc_html__( 'An advanced widget that gives you total control over the output of your bookmarks (links).', 'hybrid-core' ) ); /* Set up the widget control options. */ $control_options = array( 'width' => 800, 'height' => 350 ); /* Create the widget. */ $this->WP_Widget( 'hybrid-bookmarks', __( 'Bookmarks', 'hybrid-core' ), $widget_options, $control_options ); /* Set up the defaults. */ $this->defaults = array( 'title_li' => esc_attr__( 'Bookmarks', 'hybrid-core' ), 'categorize' => true, 'category_order' => 'ASC', 'category_orderby' => 'name', 'category' => array(), 'exclude_category' => array(), 'limit' => -1, 'order' => 'ASC', 'orderby' => 'name', 'include' => array(), 'exclude' => array(), 'search' => '', 'hide_invisible' => true, 'show_description' => false, 'show_images' => false, 'show_rating' => false, 'show_updated' => false, 'show_private' => false, 'show_name' => false, 'class' => 'linkcat', 'link_before' => '', 'link_after' => '', 'between' => ' – ', ); } /** * Outputs the widget based on the arguments input through the widget controls. * * @since 0.6.0 * @access public * @param array $sidebar * @param array $instance * @return void */ function widget( $sidebar, $instance ) { /* Set up the $before_widget ID for multiple widgets created by the bookmarks widget. */ if ( !empty( $instance['categorize'] ) ) $sidebar['before_widget'] = preg_replace( '/id="[^"]*"/','id="%id"', $sidebar['before_widget'] ); /* Add a class to $before_widget if one is set. */ if ( !empty( $instance['class'] ) ) $sidebar['before_widget'] = str_replace( 'class="', 'class="' . esc_attr( $instance['class'] ) . ' ', $sidebar['before_widget'] ); /* Set the $args for wp_list_bookmarks() to the $instance array. */ $args = wp_parse_args( $instance, $this->defaults ); /* wp_list_bookmarks() hasn't been updated in WP to use wp_parse_id_list(), so we have to pass strings for includes/excludes. */ if ( !empty( $args['category'] ) && is_array( $args['category'] ) ) $args['category'] = join( ', ', $args['category'] ); if ( !empty( $args['exclude_category'] ) && is_array( $args['exclude_category'] ) ) $args['exclude_category'] = join( ', ', $args['exclude_category'] ); if ( !empty( $args['include'] ) && is_array( $args['include'] ) ) $args['include'] = join( ',', $args['include'] ); if ( !empty( $args['exclude'] ) && is_array( $args['exclude'] ) ) $args['exclude'] = join( ',', $args['exclude'] ); /* If no limit is given, set it to -1. */ $args['limit'] = empty( $args['limit'] ) ? -1 : $args['limit']; /* Some arguments must be set to the sidebar arguments to be output correctly. */ $args['title_li'] = apply_filters( 'widget_title', ( empty( $args['title_li'] ) ? __( 'Bookmarks', 'hybrid-core' ) : $args['title_li'] ), $instance, $this->id_base ); $args['title_before'] = $sidebar['before_title']; $args['title_after'] = $sidebar['after_title']; $args['category_before'] = $sidebar['before_widget']; $args['category_after'] = $sidebar['after_widget']; $args['category_name'] = ''; $args['echo'] = false; /* Output the bookmarks widget. */ $bookmarks = str_replace( array( "\r", "\n", "\t" ), '', wp_list_bookmarks( $args ) ); /* If no title is given and the bookmarks aren't categorized, add a wrapper