Categories()
Description #
Register AnsPress category widget.
Source #
File: addons/categories/widget.php
class Categories extends \WP_Widget { /** * Construct */ public function __construct() { // Instantiate the parent object. parent::__construct( 'AnsPress_Category_Widget', __( '(AnsPress) Categories', 'anspress-question-answer' ), array( 'description' => __( 'Display AnsPress categories', 'anspress-question-answer' ) ) ); } /** * Widget output. * * @param array $args Widget arguments. * @param array $instance Widget instance. */ public function widget( $args, $instance ) { $instance = wp_parse_args( $instance, array( 'title' => __( 'Categories', 'anspress-question-answer' ), 'hide_empty' => false, 'parent' => 0, 'number' => 10, 'orderby' => 'count', 'order' => 'DESC', 'icon_width' => 32, 'icon_height' => 32, ) ); /** * This filter is documented in widgets/question_stats.php */ $title = apply_filters( 'widget_title', $instance['title'] ); echo wp_kses_post( $args['before_widget'] ); if ( ! empty( $title ) ) { echo wp_kses_post( $args['before_title'] . $title . $args['after_title'] ); } $cat_args = array( 'taxonomy' => 'question_category', 'parent' => $instance['parent'], 'number' => $instance['number'], 'hide_empty' => $instance['hide_empty'], 'orderby' => $instance['orderby'], 'order' => $instance['order'], ); $icon_width = ( ! empty( $instance['icon_width'] ) && is_numeric( $instance['icon_width'] ) ) ? $instance['icon_width'] : 32; $icon_height = ( ! empty( $instance['icon_height'] ) && is_numeric( $instance['icon_height'] ) ) ? $instance['icon_height'] : 32; $categories = get_terms( $cat_args ); ?> <ul id="ap-categories-widget" class="ap-cat-wid clearfix"> <?php foreach ( (array) $categories as $key => $category ) : $ap_category = get_term_meta( $category->term_id, 'ap_category', true ); $ap_category = wp_parse_args( $ap_category, array( 'color' => '#333', 'icon' => 'apicon-category', ) ); $cat_color = ! empty( $ap_category['color'] ) ? $ap_category['color'] : '#333'; $sub_cat_count = count( get_term_children( $category->term_id, 'question_category' ) ); ?> <li class="clearfix"> <a class="ap-cat-image" style="height:<?php echo esc_attr( $icon_height ); ?>px;width:<?php echo esc_attr( $icon_width ); ?>px;background: <?php echo esc_attr( $cat_color ); ?>" href="<?php echo esc_url( get_category_link( $category ) ); ?>"> <span class="ap-category-icon <?php echo esc_attr( $ap_category['icon'] ); ?>"></span> </a> <a class="ap-cat-wid-title" href="<?php echo esc_url( get_category_link( $category ) ); ?>"> <?php echo esc_html( $category->name ); ?> </a> <div class="ap-cat-count"> <span> <?php // translators: Placeholder contains questions count. echo esc_attr( sprintf( _n( '%d Question', '%d Questions', $category->count, 'anspress-question-answer' ), (int) $category->count ) ); ?> </span> <?php if ( $sub_cat_count > 0 ) : ?> <span> <?php // translators: Placeholder contains child category count. printf( esc_attr__( '%d Child', 'anspress-question-answer' ), (int) $sub_cat_count ); ?> </span> <?php endif; ?> </div> </li> <?php endforeach; ?> </ul> <?php echo wp_kses_post( $args['after_widget'] ); } /** * Widget form. * * @param array $instance From instance. * @return void */ public function form( $instance ) { $title = ! empty( $instance['title'] ) ? $instance['title'] : __( 'Categories', 'anspress-question-answer' ); $hide_empty = ! empty( $instance['hide_empty'] ) ? $instance['hide_empty'] : false; $parent = ! empty( $instance['parent'] ) ? $instance['parent'] : 0; $number = ! empty( $instance['number'] ) ? $instance['number'] : 10; $orderby = ! empty( $instance['orderby'] ) ? $instance['orderby'] : 'count'; $order = ! empty( $instance['order'] ) ? $instance['order'] : 'DESC'; $icon_height = ! empty( $instance['icon_height'] ) ? $instance['icon_height'] : '32'; $icon_width = ! empty( $instance['icon_width'] ) ? $instance['icon_width'] : '32'; $cat_args = array( 'taxonomy' => 'question_category', 'hide_empty' => false, 'orderby' => 'count', 'order' => 'DESC', ); $categories = get_terms( $cat_args ); ?> <p> <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_attr_e( 'Title:', 'anspress-question-answer' ); ?></label> <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>"> </p> <p> <label for="<?php echo esc_attr( $this->get_field_id( 'hide_empty' ) ); ?>"><?php esc_attr_e( 'Hide empty:', 'anspress-question-answer' ); ?></label> <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'hide_empty' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'hide_empty' ) ); ?>" type="checkbox" value="1" <?php checked( true, $hide_empty ); ?>> </p> <p> <label for="<?php echo esc_attr( $this->get_field_id( 'parent' ) ); ?>"><?php esc_attr_e( 'Parent:', 'anspress-question-answer' ); ?></label> <select class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'parent' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'parent' ) ); ?>"> <option value="0"><?php esc_attr_e( 'Top level', 'anspress-question-answer' ); ?></option> <?php if ( $categories ) { foreach ( $categories as $c ) { echo '<option value="' . (int) $c->term_id . '" ' . selected( $parent, $c->term_id ) . '>' . esc_html( $c->name ) . '</option>'; } } ?> </select> </p> <p> <label for="<?php echo esc_attr( $this->get_field_id( 'number' ) ); ?>"><?php esc_attr_e( 'Number:', 'anspress-question-answer' ); ?></label> <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'number' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'number' ) ); ?>" type="text" value="<?php echo esc_attr( $number ); ?>"> </p> <p> <label for="<?php echo esc_attr( $this->get_field_id( 'orderby' ) ); ?>"><?php esc_attr_e( 'Order By:', 'anspress-question-answer' ); ?></label> <select class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'orderby' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'orderby' ) ); ?>"> <option value="none" <?php echo selected( $orderby, 'none' ); ?>><?php esc_attr_e( 'None', 'anspress-question-answer' ); ?></option> <option value="count" <?php echo selected( $orderby, 'count' ); ?>><?php esc_attr_e( 'Count', 'anspress-question-answer' ); ?></option> <option value="id" <?php echo selected( $orderby, 'id' ); ?>><?php esc_attr_e( 'ID', 'anspress-question-answer' ); ?></option> <option value="name" <?php echo selected( $orderby, 'name' ); ?>><?php esc_attr_e( 'Name', 'anspress-question-answer' ); ?></option> <option value="slug" <?php echo selected( $orderby, 'slug' ); ?>><?php esc_attr_e( 'Slug', 'anspress-question-answer' ); ?></option> <option value="term_group" <?php echo selected( $orderby, 'term_group' ); ?>><?php esc_attr_e( 'Term group', 'anspress-question-answer' ); ?></option> </select> </p> <p> <label for="<?php echo esc_attr( $this->get_field_id( 'order' ) ); ?>"><?php esc_attr_e( 'Order:', 'anspress-question-answer' ); ?></label> <select class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'order' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'order' ) ); ?>"> <option value="DESC" <?php echo selected( $order, 'DESC' ); ?>><?php esc_attr_e( 'DESC', 'anspress-question-answer' ); ?></option> <option value="ASC" <?php echo selected( $order, 'ASC' ); ?>><?php esc_attr_e( 'ASC', 'anspress-question-answer' ); ?></option> </select> </p> <p> <label for="<?php echo esc_attr( $this->get_field_id( 'icon_width' ) ); ?>"><?php esc_attr_e( 'Icon width:', 'anspress-question-answer' ); ?></label> <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'icon_width' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'icon_width' ) ); ?>" type="text" value="<?php echo esc_attr( $icon_width ); ?>"> </p> <p> <label for="<?php echo esc_attr( $this->get_field_id( 'icon_height' ) ); ?>"><?php esc_attr_e( 'Icon height:', 'anspress-question-answer' ); ?></label> <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'icon_height' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'icon_height' ) ); ?>" type="text" value="<?php echo esc_attr( $icon_height ); ?>"> </p> <?php } /** * Sanitize widget form values as they are saved. * * @see WP_Widget::update() * * @param array $new_instance Values just sent to be saved. * @param array $old_instance Previously saved values from database. * * @return array Updated safe values to be saved. */ public function update( $new_instance, $old_instance ) { $instance = array(); $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? wp_strip_all_tags( $new_instance['title'] ) : ''; $instance['hide_empty'] = ( ! empty( $new_instance['hide_empty'] ) ) ? wp_strip_all_tags( $new_instance['hide_empty'] ) : false; $instance['parent'] = ( ! empty( $new_instance['parent'] ) ) ? wp_strip_all_tags( $new_instance['parent'] ) : '0'; $instance['number'] = ( ! empty( $new_instance['number'] ) ) ? wp_strip_all_tags( $new_instance['number'] ) : '5'; $instance['orderby'] = ( ! empty( $new_instance['orderby'] ) ) ? wp_strip_all_tags( $new_instance['orderby'] ) : 'count'; $instance['order'] = ( ! empty( $new_instance['order'] ) ) ? wp_strip_all_tags( $new_instance['order'] ) : 'DESC'; $instance['icon_width'] = ( ! empty( $new_instance['icon_width'] ) ) ? (int) $new_instance['icon_width'] : 32; $instance['icon_height'] = ( ! empty( $new_instance['icon_height'] ) ) ? (int) $new_instance['icon_height'] : 32; return $instance; } }
Expand full source code Collapse full source code View on GitHub: addons/categories/widget.php:20
Add your comment