WordPress 4.4
[autoinstalls/wordpress.git] / wp-includes / widgets / class-wp-widget-categories.php
1 <?php
2 /**
3  * Widget API: WP_Widget_Categories class
4  *
5  * @package WordPress
6  * @subpackage Widgets
7  * @since 4.4.0
8  */
9
10 /**
11  * Core class used to implement a Categories widget.
12  *
13  * @since 2.8.0
14  *
15  * @see WP_Widget
16  */
17 class WP_Widget_Categories extends WP_Widget {
18
19         /**
20          * Sets up a new Categories widget instance.
21          *
22          * @since 2.8.0
23          * @access public
24          */
25         public function __construct() {
26                 $widget_ops = array( 'classname' => 'widget_categories', 'description' => __( "A list or dropdown of categories." ) );
27                 parent::__construct('categories', __('Categories'), $widget_ops);
28         }
29
30         /**
31          * Outputs the content for the current Categories widget instance.
32          *
33          * @since 2.8.0
34          * @access public
35          *
36          * @param array $args     Display arguments including 'before_title', 'after_title',
37          *                        'before_widget', and 'after_widget'.
38          * @param array $instance Settings for the current Categories widget instance.
39          */
40         public function widget( $args, $instance ) {
41                 static $first_dropdown = true;
42
43                 /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
44                 $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? __( 'Categories' ) : $instance['title'], $instance, $this->id_base );
45
46                 $c = ! empty( $instance['count'] ) ? '1' : '0';
47                 $h = ! empty( $instance['hierarchical'] ) ? '1' : '0';
48                 $d = ! empty( $instance['dropdown'] ) ? '1' : '0';
49
50                 echo $args['before_widget'];
51                 if ( $title ) {
52                         echo $args['before_title'] . $title . $args['after_title'];
53                 }
54
55                 $cat_args = array(
56                         'orderby'      => 'name',
57                         'show_count'   => $c,
58                         'hierarchical' => $h
59                 );
60
61                 if ( $d ) {
62                         $dropdown_id = ( $first_dropdown ) ? 'cat' : "{$this->id_base}-dropdown-{$this->number}";
63                         $first_dropdown = false;
64
65                         echo '<label class="screen-reader-text" for="' . esc_attr( $dropdown_id ) . '">' . $title . '</label>';
66
67                         $cat_args['show_option_none'] = __( 'Select Category' );
68                         $cat_args['id'] = $dropdown_id;
69
70                         /**
71                          * Filter the arguments for the Categories widget drop-down.
72                          *
73                          * @since 2.8.0
74                          *
75                          * @see wp_dropdown_categories()
76                          *
77                          * @param array $cat_args An array of Categories widget drop-down arguments.
78                          */
79                         wp_dropdown_categories( apply_filters( 'widget_categories_dropdown_args', $cat_args ) );
80                         ?>
81
82 <script type='text/javascript'>
83 /* <![CDATA[ */
84 (function() {
85         var dropdown = document.getElementById( "<?php echo esc_js( $dropdown_id ); ?>" );
86         function onCatChange() {
87                 if ( dropdown.options[ dropdown.selectedIndex ].value > 0 ) {
88                         location.href = "<?php echo home_url(); ?>/?cat=" + dropdown.options[ dropdown.selectedIndex ].value;
89                 }
90         }
91         dropdown.onchange = onCatChange;
92 })();
93 /* ]]> */
94 </script>
95
96 <?php
97                 } else {
98 ?>
99                 <ul>
100 <?php
101                 $cat_args['title_li'] = '';
102
103                 /**
104                  * Filter the arguments for the Categories widget.
105                  *
106                  * @since 2.8.0
107                  *
108                  * @param array $cat_args An array of Categories widget options.
109                  */
110                 wp_list_categories( apply_filters( 'widget_categories_args', $cat_args ) );
111 ?>
112                 </ul>
113 <?php
114                 }
115
116                 echo $args['after_widget'];
117         }
118
119         /**
120          * Handles updating settings for the current Categories widget instance.
121          *
122          * @since 2.8.0
123          * @access public
124          *
125          * @param array $new_instance New settings for this instance as input by the user via
126          *                            WP_Widget::form().
127          * @param array $old_instance Old settings for this instance.
128          * @return array Updated settings to save.
129          */
130         public function update( $new_instance, $old_instance ) {
131                 $instance = $old_instance;
132                 $instance['title'] = sanitize_text_field( $new_instance['title'] );
133                 $instance['count'] = !empty($new_instance['count']) ? 1 : 0;
134                 $instance['hierarchical'] = !empty($new_instance['hierarchical']) ? 1 : 0;
135                 $instance['dropdown'] = !empty($new_instance['dropdown']) ? 1 : 0;
136
137                 return $instance;
138         }
139
140         /**
141          * Outputs the settings form for the Categories widget.
142          *
143          * @since 2.8.0
144          * @access public
145          *
146          * @param array $instance Current settings.
147          */
148         public function form( $instance ) {
149                 //Defaults
150                 $instance = wp_parse_args( (array) $instance, array( 'title' => '') );
151                 $title = sanitize_text_field( $instance['title'] );
152                 $count = isset($instance['count']) ? (bool) $instance['count'] :false;
153                 $hierarchical = isset( $instance['hierarchical'] ) ? (bool) $instance['hierarchical'] : false;
154                 $dropdown = isset( $instance['dropdown'] ) ? (bool) $instance['dropdown'] : false;
155                 ?>
156                 <p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e( 'Title:' ); ?></label>
157                 <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( $title ); ?>" /></p>
158
159                 <p><input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id('dropdown'); ?>" name="<?php echo $this->get_field_name('dropdown'); ?>"<?php checked( $dropdown ); ?> />
160                 <label for="<?php echo $this->get_field_id('dropdown'); ?>"><?php _e( 'Display as dropdown' ); ?></label><br />
161
162                 <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id('count'); ?>" name="<?php echo $this->get_field_name('count'); ?>"<?php checked( $count ); ?> />
163                 <label for="<?php echo $this->get_field_id('count'); ?>"><?php _e( 'Show post counts' ); ?></label><br />
164
165                 <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id('hierarchical'); ?>" name="<?php echo $this->get_field_name('hierarchical'); ?>"<?php checked( $hierarchical ); ?> />
166                 <label for="<?php echo $this->get_field_id('hierarchical'); ?>"><?php _e( 'Show hierarchy' ); ?></label></p>
167                 <?php
168         }
169
170 }