WordPress.org

Make WordPress Core

Ticket #17276: tax-categories-widget.php

File tax-categories-widget.php, 6.4 KB (added by squeeky, 3 years ago)

example of custom post type and custom taxonomies integration ( purposal for new Categories widget )

Line 
1<?php
2/*
3 *
4 * @file: tax-categories-widget.php
5 *
6 *
7
8
9Plugin Name: Tax Categories Widget Test
10Plugin URI: http://core.trac.wordpress.org/ticket/17276
11Description: This is just a plugin for testing - it symbolizes the hope and enthusiasm that in the near future relevant aspects of custom post types and custom taxonomies get integrated in with existing default WordPress features.
12Author: squeeky
13Version: 0.2
14Author URI: http://mywebwizards.com/
15
16
17
18        ______________________________________________________
19        ******************************************************
20        Tax / Categories widget
21        for relavant Taxonomies                                                         */
22
23class Tax_Categories_Widget extends WP_Widget {
24
25        function Tax_Categories_Widget() {
26                $widget_ops = array( 'classname' => 'widget_categories', 'description' => __( "A list or dropdown of categories / and optiionally custom taxonomy categories" ) );
27                $this->WP_Widget('tax_categories', __('* Tax / Categories'), $widget_ops);
28        }
29
30        function widget( $args, $instance ) {
31                extract( $args );
32
33                $title = apply_filters('widget_title', empty( $instance['title'] ) ? __( 'Custom Categories' ) : $instance['title'], $instance, $this->id_base);
34                $taxcats = $instance['taxcats']; // *** $taxcats $instance
35                $c = $instance['count'] ? '1' : '0';
36                $h = $instance['hierarchical'] ? '1' : '0';
37                $d = $instance['dropdown'] ? '1' : '0';
38
39                echo $before_widget;
40                if ( $title )
41                        echo $before_title . $title . $after_title;
42
43
44                // In case a custom taxonomy that this widget was set to use got deactivated,
45                // then SET it to use the widget's default / 'category' ( for Posts )
46                if ( !taxonomy_exists($taxcats) )
47                        $taxcats = 'category';
48
49                $cat_args = array('taxonomy' => $taxcats, 'orderby' => 'name', 'show_count' => $c, 'hierarchical' => $h);
50
51                if ( $d ) {
52                        $cat_args['show_option_none'] = __('Select Category');
53                        wp_dropdown_categories(apply_filters('widget_categories_dropdown_args', $cat_args));
54?>
55
56<script type='text/javascript'>
57/* <![CDATA[ */
58        var dropdown = document.getElementById("cat");
59        function onCatChange() {
60                if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
61                        location.href = "<?php echo home_url(); ?>/?cat="+dropdown.options[dropdown.selectedIndex].value;
62                }
63        }
64        dropdown.onchange = onCatChange;
65/* ]]> */
66</script>
67
68<?php
69                } else {
70?>
71                <ul>
72<?php
73                $cat_args['title_li'] = '';
74                wp_list_categories(apply_filters('widget_categories_args', $cat_args));
75?>
76                </ul>
77<?php
78                }
79
80                echo $after_widget;
81        }
82
83        function update( $new_instance, $old_instance ) {
84                $instance = $old_instance;
85                $instance['title'] = strip_tags($new_instance['title']);
86                $instance['taxcats'] = $new_instance['taxcats']; // *** $taxcats $instance
87                $instance['count'] = !empty($new_instance['count']) ? 1 : 0;
88                $instance['hierarchical'] = !empty($new_instance['hierarchical']) ? 1 : 0;
89                $instance['dropdown'] = !empty($new_instance['dropdown']) ? 1 : 0;
90
91                return $instance;
92        }
93
94        function form( $instance ) {
95
96                //Defaults
97                $instance = wp_parse_args( (array) $instance, array( 'title' => '') );
98                $title = esc_attr( $instance['title'] );
99                $taxcats = esc_attr( $instance['taxcats'] ); // *** $taxcats $instance
100                $count = isset($instance['count']) ? (bool) $instance['count'] :false;
101                $hierarchical = isset( $instance['hierarchical'] ) ? (bool) $instance['hierarchical'] : false;
102                $dropdown = isset( $instance['dropdown'] ) ? (bool) $instance['dropdown'] : false;
103
104?>
105
106                <p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e( 'Title:' ); ?></label>
107                <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" /></p>
108
109<?php 
110
111
112                /*      ______________________________________________________
113                        ******************************************************
114                        If custom hierarchical taxonomies exist...
115                        ("custom categories") gather them in an array
116                        and provide an option to use them for this widget       */
117
118
119                // set arguments for custom hierarchical taxonomies
120                $args = array(
121                        'hierarchical' => true,
122                        'public' => true,
123                        '_builtin' => false,
124                );
125
126                // IF custom hierarchical taxonomies exist
127                if( get_taxonomies( $args ) ) {
128
129                        // array to collect custom hierarchical taxonomies
130                        $custom_cats = (array) $custom_cats;
131
132                        // collect each custom hierarchical taxonomy
133                        foreach( get_taxonomies( $args ) as $custom_tax ) 
134                                $custom_cats[] = $custom_tax;
135
136                        $current_taxcats = $instance['taxcats']; // *** $taxcats $instance
137
138                        // provide option to use the custom hierarchical taxonomies for this widget
139?>
140
141                <p><label for="<?php echo $this->get_field_id('taxcats'); ?>"><?php _e('Select taxonomy:') ?></label>
142                <select class="widefat" id="<?php echo $this->get_field_id('taxcats'); ?>" name="<?php echo $this->get_field_name('taxcats'); ?>">
143                        <option value="category" <?php selected('category', $current_taxcats) ?>><?php _e('Categories ( default for posts )') ?></option>
144<?php foreach ( $custom_cats as $taxcats ) : ?>
145                        <option value="<?php echo esc_attr($taxcats) ?>" <?php selected($taxcats, $current_taxcats) ?>><?php echo get_taxonomy($taxcats)->labels->name; ?></option>
146<?php endforeach; ?>
147                </select></p>
148
149<?php
150
151                }
152
153?>
154
155                <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 ); ?> />
156                <label for="<?php echo $this->get_field_id('dropdown'); ?>"><?php _e( 'Display as dropdown' ); ?></label><br />
157
158                <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id('count'); ?>" name="<?php echo $this->get_field_name('count'); ?>"<?php checked( $count ); ?> />
159                <label for="<?php echo $this->get_field_id('count'); ?>"><?php _e( 'Show post counts' ); ?></label><br />
160
161                <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id('hierarchical'); ?>" name="<?php echo $this->get_field_name('hierarchical'); ?>"<?php checked( $hierarchical ); ?> />
162                <label for="<?php echo $this->get_field_id('hierarchical'); ?>"><?php _e( 'Show hierarchy' ); ?></label></p>
163
164<?php
165
166        }
167
168}
169
170
171/**
172 * Register widget - Then call 'widgets_init' action
173 * after the widget has been registered.
174 */
175function taxcat_widget_init() {
176        if ( !is_blog_installed() )
177                return;
178
179        register_widget('Tax_Categories_Widget');
180
181        do_action('widgets_init');
182}
183
184add_action('init', 'taxcat_widget_init', 1);
185
186?>