WordPress.org

Plugin Directory

Changeset 415011


Ignore:
Timestamp:
07/25/11 22:50:06 (3 years ago)
Author:
mfields
Message:

Version 0.6

Location:
taxonomy-widget/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • taxonomy-widget/trunk/readme.txt

    r288056 r415011  
    1 ===Plugin Name=== 
    2 Taxonomy Widget 
     1=== Taxonomy Widget === 
    32 
    43Contributors: mfields 
    5 Donate link: http://mfields.org/donate/ 
     4Donate link: http://wordpress.mfields.org/donate/ 
    65Tags: taxonomy, tag, category, widget, cloud, dropdown 
    7 Requires at least: 2.9.2 
    8 Tested up to: 3.0 
     6Requires at least: 3.2 
     7Tested up to: 3.2.1 
    98Stable tag: trunk 
    109 
    11 Creates widgets for any post taxonomy. Display terms as a list, cloud or dropdown menu. 
    12  
     10Creates widgets for any public taxonomy. Display terms as an ordered list, unordered list, term cloud or dropdown menu. 
    1311 
    1412==Description== 
    15 The Taxonomy Widget Plugin enables users of all skill levels to create widgets in their sidebar that display all terms of any given post taxonomy including tags and categories. Users can choose between 3 different templates including two types of lists, a term cloud or a dropdown menu. 
     13The Taxonomy Widget Plugin enables users to create widgets in their sidebar that display all terms of any given taxonomy. Users can choose between 3 different templates including two types of lists, a term cloud or a dropdown menu. 
    1614 
    1715 
    1816= Options = 
    19 __Title__ - You can enter a custom title for your widget in this text input. If you leave this field blank, The name of the Taxonomy will be used. If you do not want a title displayed at all, you can toggle this by un-checking the *Display title* box under *Advanced Options*. 
     17__Title__ - You can enter a custom title for your widget in this text input. If you leave this field blank, The name of the taxonomy will be used. If you do not want a title displayed at all, you can toggle this by un-checking the *Display title* box under *Advanced Options*. 
    2018 
    2119__Taxonomy__ - You can select the taxonomy whose terms you would like displayed by selecting it from the dropdown menu. 
    2220 
    23 __Template__ - Select a template for your terms by selecting one of the radio buttons in the *Display Taxonomy As:* section. 
     21__Template__ - Select a template for your terms by selecting one of the radio buttons in the *Display Taxonomy As* section. 
    2422 
    2523__Display title__ - If checked the title will be displayed. Un-checking this option will hide the title. Defaults to checked. 
     
    3533 
    3634= Support = 
    37 If you find that this plugin is has a bug, does not play nicely with other plugins or if you have a suggestion or comment, please <a href="http://wordpress.org/tags/taxonomy-widget?forum_id=10#postform">use this link to add a new thread to the WordPress Support Forum</a> 
    3835 
     36If you have questions about integrating this plugin into your site, please [add a new thread to the WordPress Support Forum](http://wordpress.org/tags/taxonomy-widget?forum_id=10#postform). I try to answer these, but I may not always be able to. In the event that I cannot there may be someone else who can help. 
     37 
     38= Bugs, Suggestions = 
     39 
     40Development of this plugin is hosted in a public repository on [Github](https://github.com/mfields/taxonomy-widget). If you find a bug in this plugin or have a suggestion to make it better, please [create a new issue](https://github.com/mfields/taxonomy-widget/issues/new) 
     41 
     42= Need More Taxonomy Plugins? = 
     43 
     44I've released a handfull of plugins dealing with taxonomies. Please see my [plugin page](http://wordpress.org/extend/plugins/profile/mfields) for more info. 
    3945 
    4046==Installation== 
     47 
    41481. Download 
    42491. Unzip the package and upload to your /wp-content/plugins/ directory. 
     
    4653 
    4754==Changelog== 
     55 
     56= 0.6 = 
     57* Cleanup. 
     58* Provide alternative default if categories are disabled. 
     59* Do not register widget if no taxonomies are registered. 
     60 
     61= 0.5.1 = 
     62* stupid comma ... 
     63* another stupid comma !!! 
     64 
     65= 0.5 = 
     66* Better escaping throughout. 
     67* Use get_term_link() for javascript redircts. 
     68 
     69= 0.4 = 
     70* Never officially released. 
     71* Dropped support for 2.9 branch. 
     72* Removed mfields_walk_taxonomy_dropdown_tree(). 
     73* Removed mfields_dropdown_taxonomy_terms(). 
     74* Removed global variables. 
     75* Moved javascript listeners into mfields_taxonomy_widget class. 
     76* Create mfields_taxonomy_widget::clean_args() to sanitize user input. 
     77* Removed mfields_taxonomy_widget::sanitize_template(). 
     78* Removed mfields_taxonomy_widget::sanitize_taxonomy(). 
     79* Tag clouds will now only display if their setting allow. 
     80* Tested with post formats. 
     81* Removed mfields_taxonomy_widget::get_query_var_name() using $taxonomy->query_var instead. 
    4882 
    4983= 0.3 = 
  • taxonomy-widget/trunk/taxonomy-widget.php

    r288056 r415011  
    11<?php 
    22/* 
    3 Plugin Name: Taxonomy Widget 
    4 Plugin URI: http://wordpress.org/extend/plugins/taxonomy-widget/ 
    5 Description: Display post taxonomies in your sidebar. 
    6 Version: 0.3 
    7 Author: Michael Fields 
    8 Author URI: http://wordpress.mfields.org/ 
    9 Copyright 2009-2010  Michael Fields  michael@mfields.org 
     3Plugin Name:    Taxonomy Widget 
     4Plugin URI:     http://wordpress.org/extend/plugins/taxonomy-widget/ 
     5Description:    Display taxonomy terms in your sidebar. 
     6Version:        0.6 
     7Author:         Michael Fields 
     8Author URI:     http://wordpress.mfields.org/ 
     9 
     10Copyright 2009-2011  Michael Fields  michael@mfields.org 
    1011 
    1112This program is free software; you can redistribute it and/or modify 
     
    2122*/ 
    2223 
    23 /** 
    24 * Wrapper function for print_r() 
    25 */ 
    26 if( !function_exists( 'pr' ) ) { 
    27     function pr( $var ) { 
    28         print '<pre>' . print_r( $var, true ) . '</pre>'; 
    29     } 
    30 } 
    31  
    32  
    33 /** 
    34 * HTML Comments to identify output created by this plugin. 
    35 */ 
    36 define( 'MFIELDS_TAXONOMY_WIDGET_COMMENT_START', '<!-- Begin Output from Taxonomy Widget Plugin -->' ); 
    37 define( 'MFIELDS_TAXONOMY_WIDGET_COMMENT_END', '<!-- End Output from Taxonomy Widget Plugin -->' ); 
    38  
    39  
    40 /** 
    41 * Store Event Listeners for each widget with the dropdown template 
    42 * @global 
    43 */ 
    44 $mfields_taxonomy_widget_js = array(); 
    45  
    46 add_action( 'admin_head-widgets.php', 'mfields_taxonomy_widget_admin_styles' ); 
    47 if( !function_exists( 'mfields_taxonomy_widget_admin_styles' ) ) { 
    48     /** 
    49     * Admin Style Action Handler 
    50     * @uses MFIELDS_TAXONOMY_WIDGET_COMMENT_START 
    51     * @uses MFIELDS_TAXONOMY_WIDGET_COMMENT_END 
    52     * @return void 
    53     */ 
    54     function mfields_taxonomy_widget_admin_styles() { 
    55         print "\n\t\t" . MFIELDS_TAXONOMY_WIDGET_COMMENT_START . "\n"; 
     24 
     25function mfields_taxonomy_widget_register() { 
     26    $taxonomies = get_taxonomies( array( 'public' => true ), 'objects' ); 
     27    if ( empty( $taxonomies ) ) { 
     28        return; 
     29    } 
     30    register_widget( 'Mfields_Taxonomy_Widget' ); 
     31} 
     32add_action( 'widgets_init', 'mfields_taxonomy_widget_register' ); 
     33 
     34 
     35class Mfields_Taxonomy_Widget extends WP_Widget { 
     36    static $listeners = array(); 
     37    var $templates = array(); 
     38    var $taxonomies = array(); 
     39    var $javascript_has_been_printed = false; 
     40    var $event_handlers = array(); 
     41    var $default_args = array( 
     42        'count'         => 0, 
     43        'display_title' => 1, 
     44        'hierarchical'  => 0, 
     45        'taxonomy'      => 'category', 
     46        'template'      => 'ul', 
     47        'title'         => '', 
     48        ); 
     49 
     50    function Mfields_Taxonomy_Widget() { 
     51 
     52        /* Configuration. */ 
     53        $this->WP_Widget( 'taxonomy', __( 'Taxonomy', 'mfields-taxonomy-widget' ), array( 
     54            'classname'   => 'widget_taxonomy', 
     55            'description' => __( 'Create a list, dropdown or term cloud of any taxonomy.', 'mfields-taxonomy-widget' ) 
     56        ) ); 
     57 
     58        /* Supported templates. */ 
     59        $this->templates = array ( 
     60            'cloud'    => __( 'Cloud', 'mfields-taxonomy-widget' ), 
     61            'dropdown' => __( 'Dropdown', 'mfields-taxonomy-widget' ), 
     62            'ol'       => __( 'Ordered List', 'mfields-taxonomy-widget' ), 
     63            'ul'       => __( 'Unordered List', 'mfields-taxonomy-widget' ), 
     64        ); 
     65 
     66        /* Get all public taxonomies. */ 
     67        $this->taxonomies = get_taxonomies( array( 'public' => true ), 'objects' ); 
     68        if ( empty( $this->taxonomies ) ) { 
     69            return; 
     70        } 
     71 
     72        $taxonomies = array_keys( $this->taxonomies ); 
     73        if ( ! in_array( 'category', $taxonomies ) ) { 
     74            $this->default_args['taxonomy'] = $taxonomies[0]; 
     75        } 
     76 
     77        /* Custom CSS is for logged-in users only. */ 
     78        if ( current_user_can( 'edit_theme_options' ) ) { 
     79            add_action( 'admin_head-widgets.php', array( &$this, 'css_admin' ) ); 
     80            add_action( 'admin_head-widgets.php', array( &$this, 'css_dialog' ) ); 
     81            add_action( 'wp_head', array( &$this, 'css_dialog' ) ); 
     82        } 
     83 
     84        /* Javascript listeners for dropdowns. */ 
     85        add_action( 'wp_footer', array( &$this, 'listeners_print' ) ); 
     86    } 
     87 
     88    function css_admin() { 
    5689        print <<<EOF 
    57         <style type="text/css"> 
    58         .mfields-taxonomy-widget-admin .heading, 
    59         .mfields-taxonomy-widget-admin legend { 
    60             font-weight: bold; 
    61             } 
    62         .mfields-taxonomy-widget-admin fieldset{ 
    63             margin:1em 0; 
    64             } 
    65         </style> 
     90<style type="text/css"> 
     91.mfields-taxonomy-widget-admin .heading, 
     92.mfields-taxonomy-widget-admin legend { 
     93    font-weight: bold; 
     94    } 
     95.mfields-taxonomy-widget-admin fieldset{ 
     96    margin:1em 0; 
     97    } 
     98</style> 
    6699EOF; 
    67         print "\n\t\t" . MFIELDS_TAXONOMY_WIDGET_COMMENT_END . "\n"; 
    68     } 
    69 } 
    70  
    71 add_action( 'wp_footer', 'mfields_taxonomy_widget_script_loader' ); 
    72 if( !function_exists( 'mfields_taxonomy_widget_script_loader' ) ) { 
    73      
    74     /** 
    75     * Print Javascript to the live site's footer. 
    76     * @uses $mfields_taxonomy_widget_js 
    77     * @uses MFIELDS_TAXONOMY_WIDGET_COMMENT_START 
    78     * @uses MFIELDS_TAXONOMY_WIDGET_COMMENT_END 
    79     * @return void 
    80     */ 
    81     function mfields_taxonomy_widget_script_loader() { 
    82         global $mfields_taxonomy_widget_js; 
    83         $url = get_option('home'); 
    84         $listeners = ''; 
    85         if( !empty( $mfields_taxonomy_widget_js ) ) { 
    86             foreach( $mfields_taxonomy_widget_js as $id ) 
    87                 $listeners.= "\n\t" . 'document.getElementById( "' . $id . '" ).onchange = changeTaxonomy;'; 
    88         } 
    89         print "\n\t\t" . MFIELDS_TAXONOMY_WIDGET_COMMENT_START . "\n"; 
     100    } 
     101 
     102    function css_dialog() { 
    90103        print <<<EOF 
    91         <script type='text/javascript'> 
    92         /* <![CDATA[ */ 
    93         function changeTaxonomy( e, query_var ) { 
    94             if ( this.options[this.selectedIndex].value != 0 && this.options[this.selectedIndex].value != -1 ) { 
    95                 location.href = "{$url}/?" + this.name + "=" + this.options[this.selectedIndex].value; 
    96             } 
    97         } 
    98         $listeners 
    99         /* ]]> */ 
    100         </script> 
     104<style type="text/css"> 
     105.dialog { 
     106    padding:.5em .75em; 
     107    margin:1em; 
     108    border:.25em dotted #acd2e5; 
     109    background-color:#bfeaff; 
     110    width:100%; 
     111} 
     112.dialog.mfields-taxonomy-widget-error    { background-color:#ffd9d9; border-color:#e5b8b8; } 
     113.dialog.mfields-notice   { background-color:#fffabf; border-color:#f2e76d } 
     114.dialog.mfields-success  { background-color:#bfffc5; border-color:#a3d9a7 } 
     115</style> 
     116EOF; 
     117    } 
     118 
     119    function listeners_add( $id ) { 
     120        if ( isset( $id ) && ! in_array( $id, self::$listeners ) ) { 
     121            self::$listeners[] = $id; 
     122        } 
     123    } 
     124 
     125    function listeners_print() { 
     126        $url = get_option( 'home' ); 
     127 
     128        $listeners = array(); 
     129        foreach ( self::$listeners as $id ) { 
     130            $listeners[] = 'document.getElementById( "' . $id . '" ).onchange = changeTaxonomy;'; 
     131        } 
     132        $listeners = join( "\n", $listeners ); 
    101133         
     134print <<<EOF 
     135<script type='text/javascript'> 
     136/* <![CDATA[ */ 
     137function changeTaxonomy() { 
     138    if ( 0 == this.options[this.selectedIndex].value ) { 
     139        return; 
     140    } 
     141    if ( 0 == this.options[this.selectedIndex].value ) { 
     142        return; 
     143    } 
     144    location.href = this.options[this.selectedIndex].value; 
     145} 
     146$listeners 
     147/* ]]> */ 
     148</script> 
    102149EOF; 
    103         print "\n\t\t" . MFIELDS_TAXONOMY_WIDGET_COMMENT_END . "\n"; 
    104     } 
    105 } 
    106  
    107 /* Support for 2.9.2 */ 
    108 if( !function_exists( 'get_taxonomies' ) ) { 
    109     function get_taxonomies() { 
    110         global $wp_taxonomies; 
    111         return $wp_taxonomies; 
    112     } 
    113 } 
    114  
    115 add_action( 'widgets_init', create_function( '', 'return register_widget( "mfields_taxonomy_widget" );' ) ); 
    116 if( !class_exists( 'mfields_taxonomy_widget' ) ) { 
    117     class mfields_taxonomy_widget extends WP_Widget { 
    118         var $templates = array (  
    119             'ul' => 'Unordered List', 
    120             'ol' => 'Ordered List', 
    121             'dropdown' => 'Dropdown', 
    122             'cloud' => 'Cloud' 
    123             ); 
    124         var $excluded_taxonomies = array( 
    125             'nav_menu', 
    126             'link_category' 
    127             ); 
    128         var $taxonomies = array(); 
    129         var $javascript_has_been_printed = false; 
    130         var $event_handlers = array(); 
    131         function mfields_taxonomy_widget() { 
    132             $widget_ops = array( 'classname' => 'widget_taxonomy', 'description' => __( "A list or dropdown of taxonomies." ) ); 
    133             $this->WP_Widget('taxonomy', __('Taxonomy'), $widget_ops); 
    134             $this->taxonomies = $this->get_taxonomies(); 
    135              
    136         } 
    137         function sanitize_template( $template ) { 
    138             return ( array_key_exists( $template, $this->templates ) ) ? $template : 'ul'; 
    139         } 
    140         function sanitize_taxonomy( $taxonomy ) { 
    141             return ( array_key_exists( $taxonomy, $this->get_taxonomies() ) ) ? $taxonomy : 'category'; 
    142         } 
    143         function get_template_control( $template ) { 
    144             $o = "\n\t" . '<fieldset><legend>' . __( 'Display Taxonomy As:' ) . '</legend>'; 
    145             foreach( $this->templates as $name => $label ) { 
    146                 $id = $this->get_field_id( 'template' ) . '-' . $name; 
    147                 $checked = ( $name === $template ) ? ' checked="checked"' : ''; 
    148                 $o.= "\n\t" . '<input' . $checked . ' type="radio" name="' . $this->get_field_name( 'template' ) . '" value="' . $name . '" id="' . $id . '" />'; 
    149                 $o.= "\n\t" . '<label for="' . $id . '">' . $label . '</label><br />'; 
    150             } 
    151             $o.= "\n\t" . '</fieldset>'; 
    152             return $o; 
    153         } 
    154         function get_taxonomy_control( $taxonomy ) { 
    155             $id = $this->get_field_id( 'taxonomy' ); 
    156             $name = $this->get_field_name( 'taxonomy' ); 
    157             $o = "\n\t" . '<label class="heading" for="' . $id . '">' . __( 'Choose Taxonomy to Display:' ) . '</label>'; 
    158             $o.= "\n\t" . '<select name="' . $name . '" id="' . $id . '">'; 
    159             foreach( $this->get_taxonomies() as $name => $tax ) { 
    160                 $selected = ( $name === $taxonomy ) ? ' selected="selected"' : ''; 
    161                 $o.= "\n\t" . '<option' . $selected . ' value="' . $name . '">' . $tax->label . '</option>'; 
    162             } 
    163             $o.= "\n\t" . '</select>'; 
    164             return $o; 
    165         } 
    166         function get_taxonomies() { 
    167             $o = array(); 
    168             $taxonomies = get_taxonomies( array(), 'objects' ); 
    169             if( !empty( $taxonomies ) ) { 
    170                 foreach( $taxonomies as $key => $taxonomy ) 
    171                     if( !in_array( $key, $this->excluded_taxonomies ) ) 
    172                         $o[$taxonomy->name] = $taxonomy; 
    173             } 
    174             return $o; 
    175         } 
    176         function get_query_var_name( $taxonomy ) { 
    177             if ( $taxonomy === 'category' ) 
    178                 return 'cat'; 
    179             if ( $taxonomy === 'post_tag' ) 
    180                 return 'tag'; 
    181             else 
    182                 return $taxonomy; 
    183         } 
    184         function widget( $args, $instance ) { 
    185             global $wp_query; 
    186             $queried_object = $wp_query->get_queried_object(); 
    187              
    188             $selected = 0; 
    189             if( isset( $queried_object->taxonomy ) ) { 
    190                 if( $queried_object->taxonomy === 'category' ) 
    191                     $selected = $queried_object->term_id; 
    192                 else  
    193                     $selected = $queried_object->slug; 
    194             } 
    195              
    196             extract( $args ); 
    197             $c = $instance['count'] ? '1' : '0'; 
    198             $hierarchical = $instance['hierarchical'] ? '1' : '0'; 
    199             $display_title = $instance['display_title'] ? '1' : '0'; 
    200             $template = $this->sanitize_template( $instance['template'] ); 
    201             $taxonomy = $this->sanitize_taxonomy( $instance['taxonomy'] ); 
    202              
    203             $title = false; 
    204             if( $display_title ) { 
    205                 $title = ( empty( $instance['title'] ) ) ? $this->taxonomies[$taxonomy]->label : $instance['title']; 
    206                 $title = apply_filters( 'widget_title', $title ); 
    207             } 
    208              
    209             print $before_widget; 
    210             if ( $title ) 
    211                 print $before_title . $title . $after_title; 
    212              
    213             $default_args = array( 
    214                 'orderby' => 'name', 
    215                 'show_count' => $c, 
    216                 'hierarchical' => $hierarchical, 
    217                 'taxonomy' => $taxonomy 
    218                 ); 
    219              
    220             $taxonomy_args = apply_filters( 'mfields_taxonomy_widget_args_global', $default_args ); 
    221              
    222             switch( $template ) { 
    223                 case 'dropdown' : 
    224                     $text = __( 'Please Choose', 'mfields-taxonomy-widget' ); 
    225                     $text = apply_filters( 'taxonomy-widget-show-option-none', $text ); 
    226                     $text = apply_filters( 'taxonomy-widget-show-option-none-' . $taxonomy, $text ); 
    227                     $text = esc_attr( $text ); 
    228                     $taxonomy_args['id'] = $this->get_field_id( 'mfields_taxonomy_widget_dropdown_wrapper' ); 
    229                     $taxonomy_args['name'] = $this->get_query_var_name( $taxonomy ); 
    230                     $taxonomy_args['show_option_none'] = $text; 
    231                     $taxonomy_args['selected'] = $selected; 
    232                     mfields_dropdown_taxonomy_terms( apply_filters( 'mfields_taxonomy_widget_args_dropdown', $taxonomy_args ) ); 
    233                     global $mfields_taxonomy_widget_js; 
    234                     $mfields_taxonomy_widget_js[] = $taxonomy_args['id']; 
     150    } 
     151 
     152    function clean_args( $args ) { 
     153        /* 
     154         * Merge $args into defaults. 
     155         * wp_parse_args() works much like array_merge() only the argument order is reversed. 
     156         */ 
     157        $args = wp_parse_args( $args, $this->default_args ); 
     158 
     159        $clean = array(); 
     160        foreach ( (array) $args as $key => $value ) { 
     161            switch ( $key ) { 
     162                /* Title */ 
     163                case 'title' : 
     164                    $clean[$key] = trim( strip_tags( $value ) ); 
    235165                    break; 
    236                 case 'cloud' : 
    237                     wp_tag_cloud( apply_filters( 'mfields_taxonomy_widget_args_cloud', $taxonomy_args ) ); 
     166                 
     167                /* Taxonomy */ 
     168                case 'taxonomy' :    
     169                    $clean[$key] = 'category'; 
     170                    if ( array_key_exists( $value, $this->taxonomies ) ) { 
     171                        $clean[$key] = $value; 
     172                    } 
    238173                    break; 
    239                 case 'ol' : 
    240                 case 'ul' :  
     174                 
     175                /* Template */ 
     176                case 'template' : 
     177                    $clean[$key] = 'ul'; 
     178                    if ( array_key_exists( $value, $this->templates ) ) { 
     179                        $clean[$key] = $value; 
     180                    } 
     181                    break; 
     182                     
     183                /* Boolean */ 
    241184                default : 
    242                     $tag = ( $template === 'ol' ) ? 'ol' : 'ul'; 
    243                     print "\n\t" . '<' . $tag . '>'; 
    244                     $taxonomy_args['title_li'] = ''; 
    245                     wp_list_categories( apply_filters( 'mfields_taxonomy_widget_args_list', $taxonomy_args ) ); 
    246                     print "\n\t" . '</' . $tag . '>'; 
     185                    $clean[$key] = (bool) $value; 
    247186                    break; 
    248187            } 
    249             print $after_widget; 
    250         } 
    251         function update( $new_instance, $old_instance ) { 
    252             $instance = $old_instance; 
    253             $instance['title'] = strip_tags( $new_instance['title'] ); 
    254             $instance['display_title'] = $new_instance['display_title'] ? 1 : 0; 
    255             $instance['count'] = $new_instance['count'] ? 1 : 0; 
    256             $instance['hierarchical'] = $new_instance['hierarchical'] ? 1 : 0;       
    257             $instance['template'] = $this->sanitize_template( $new_instance['template'] ); 
    258             $instance['taxonomy'] = $this->sanitize_taxonomy( $new_instance['taxonomy'] ); 
    259             return $instance; 
    260         } 
    261         function form( $instance ) { 
    262             //Defaults 
    263             $instance = wp_parse_args( (array) $instance, array( 'title' => '' ) ); 
    264             $title = esc_attr( $instance['title'] ); 
    265             $display_title = isset( $instance['display_title'] ) ? (bool) $instance['display_title'] : true; 
    266             $count = isset( $instance['count'] ) ? (bool) $instance['count'] : false; 
    267             $hierarchical = isset( $instance['hierarchical'] ) ? (bool) $instance['hierarchical'] : false; 
    268             $template = 'ul'; 
    269             if( isset( $instance['template'] ) ) { 
    270                 $template = $this->sanitize_template( $instance['template'] ); 
     188        } 
     189        return $clean; 
     190    } 
     191 
     192    function widget( $args, $instance ) { 
     193        extract( $args ); 
     194        extract( $this->clean_args( $instance ) ); 
     195 
     196        $taxonomy_object = get_taxonomy( $taxonomy ); 
     197 
     198        /* 
     199         * Return early if taxonomy does not support clouds. 
     200         */ 
     201        if ( 'cloud' == $template && isset( $taxonomy_object->show_tagcloud ) && empty( $taxonomy_object->show_tagcloud ) ) { 
     202            if ( current_user_can( 'edit_theme_options' ) ) { 
     203                print '<div class="dialog mfields-taxonomy-widget-error">'; 
     204                print $before_title . sprintf( esc_html__( 'Taxonomy Widget Error', 'mfields-taxonomy-widget' ) ) . $after_title; 
     205                if ( isset( $taxonomy_object->label ) && ! empty( $taxonomy_object->label ) ) { 
     206                    printf( esc_html__( 'Term clouds are not supported for &#8220;%1$s&#8221;.', 'mfields-taxonomy-widget' ), $taxonomy_object->label ); 
     207                } 
     208                else { 
     209                    printf( esc_html__( 'Term clouds are not supported for this taxonomy.', 'mfields-taxonomy-widget' ) ); 
     210                } 
     211                print '</div>'; 
    271212            } 
    272             $taxonomy = 'category'; 
    273             if( isset( $instance['taxonomy'] ) ) { 
    274                 $taxonomy = $this->sanitize_taxonomy( $instance['taxonomy'] ); 
     213            return; 
     214        } 
     215 
     216        $title = apply_filters( 'widget_title', $title ); 
     217 
     218        print $before_widget; 
     219 
     220        if ( ! empty( $title ) ) { 
     221            print $before_title . $title . $after_title; 
     222        } 
     223 
     224        $taxonomy_args = apply_filters( 'mfields_taxonomy_widget_args_global', array( 
     225            'hierarchical' => $hierarchical, 
     226            'orderby'      => 'name', 
     227            'show_count'   => $count, 
     228            'taxonomy'     => $taxonomy 
     229            ) ); 
     230 
     231        switch ( $template ) { 
     232 
     233            case 'dropdown' : 
     234 
     235                $term = get_queried_object(); 
     236 
     237                $show_option_none = __( 'Please Choose', 'mfields-taxonomy-widget' ); 
     238                $show_option_none = apply_filters( 'taxonomy-widget-show-option-none', $show_option_none ); 
     239                $show_option_none = apply_filters( 'taxonomy-widget-show-option-none-' . $taxonomy, $show_option_none ); 
     240                $show_option_none = esc_attr( $show_option_none ); 
     241 
     242                $selected = null; 
     243                if ( isset( $term->taxonomy ) ) { 
     244                    $selected = get_term_link( $term, $term->taxonomy ); 
     245                } 
     246 
     247                /* Arguments specific to wp_dropdown_categories(). */ 
     248                $dropdown_args = array( 
     249                    'id'               => $this->get_field_id( 'mfields_taxonomy_widget_dropdown_wrapper' ), 
     250                    'name'             => $taxonomy_object->query_var, 
     251                    'selected'         => $selected, 
     252                    'show_option_none' => $show_option_none, 
     253                    'walker'           => new Mfields_Walker_Taxonomy_Dropdown(), 
     254                    ); 
     255 
     256                $args = array_merge( $taxonomy_args, $dropdown_args ); 
     257 
     258                wp_dropdown_categories( $args ); 
     259 
     260                $this->listeners_add( $args['id'] ); 
     261 
     262                break; 
     263 
     264            case 'cloud' : 
     265                wp_tag_cloud( apply_filters( 'mfields_taxonomy_widget_args_cloud', $taxonomy_args ) ); 
     266                break; 
     267 
     268            case 'ol' : 
     269            case 'ul' :  
     270            default : 
     271                $tag = 'ul'; 
     272                if ( $template == 'ol' ) { 
     273                    $tag = 'ol'; 
     274                } 
     275                print "\n\t" . '<' . $tag . '>'; 
     276                $taxonomy_args['title_li'] = ''; 
     277                wp_list_categories( apply_filters( 'mfields_taxonomy_widget_args_list', $taxonomy_args ) ); 
     278                print "\n\t" . '</' . $tag . '>'; 
     279                break; 
     280        } 
     281        print $after_widget; 
     282    } 
     283 
     284    function update( $new_instance, $old_instance ) { 
     285        return $this->clean_args( $new_instance ); 
     286    } 
     287 
     288    function form( $instance ) { 
     289        extract( $this->clean_args( $instance ) ); 
     290 
     291        print "\n\t" . '<div class="mfields-taxonomy-widget-admin">'; 
     292 
     293        /* 
     294         * Widget Title. 
     295         */ 
     296        print "\n\t" . '<p><label for="' . esc_attr( $this->get_field_id( 'title' ) ) . '" class="heading">' . esc_html__( 'Title:', 'mfields-taxonomy-widget' ) . '</label>'; 
     297        print "\n\t" . '<input class="widefat" id="' . esc_attr( $this->get_field_id( 'title' ) ) . '" name="' . esc_attr( $this->get_field_name( 'title' ) ) . '" type="text" value="' . esc_attr( $title ) . '" /></p>'; 
     298 
     299        /* 
     300         * Choose a Taxonomy. 
     301         */ 
     302        $id = $this->get_field_id( 'taxonomy' ); 
     303        print "\n\t" . '<label class="heading" for="' . esc_attr( $id ) . '">' . esc_html__( 'Choose Taxonomy to Display:', 'mfields-taxonomy-widget' ) . '</label>'; 
     304        print "\n\t" . '<select name="' . esc_attr( $this->get_field_name( 'taxonomy' ) ) . '" id="' . esc_attr( $id ) . '" class="widefat">'; 
     305        foreach ( $this->taxonomies as $slug => $taxonomy ) { 
     306            if ( isset( $taxonomy->label ) && ! empty( $taxonomy->label ) ) { 
     307                print "\n\t" . '<option value="' . esc_attr( $slug ) . '" ' . selected( $slug, $instance['taxonomy'], false ) . '>' . esc_html( $taxonomy->label ) . '</option>'; 
    275308            } 
    276             print "\n\t" . '<div class="mfields-taxonomy-widget-admin">'; 
    277              
    278             /* TITLE */ 
    279             print "\n\t" . '<p><label for="' . $this->get_field_id('title') . '" class="heading">' . __( 'Title:' ) . '</label>'; 
    280             print "\n\t" . '<input class="widefat" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('title') . '" type="text" value="' . $title . '" /></p>'; 
    281              
    282             /* TAXONOMY */ 
    283             print $this->get_taxonomy_control( $taxonomy ); 
    284              
    285             /* TEMPLATE */ 
    286             print $this->get_template_control( $template ); 
    287              
    288             print "\n\t" . '<fieldset><legend>Advanced Options</legend>'; 
    289              
    290             /* DISPLAY TITLE */ 
    291             print "\n\t" . '<input type="checkbox" class="checkbox" id="' . $this->get_field_id( 'display_title' ) . '" name="' . $this->get_field_name( 'display_title' ) . '"' . checked( $display_title, true, false ) . ' />'; 
    292             print "\n\t" . '<label for="' . $this->get_field_id( 'display_title' ) . '">' . __( 'Display Title' ) . '</label><br />'; 
    293              
    294             /* COUNT */ 
    295             print "\n\t" . '<input type="checkbox" class="checkbox" id="' . $this->get_field_id( 'count' ) . '" name="' . $this->get_field_name( 'count' ) . '"' . checked( $count, true, false ) . ' />'; 
    296             print "\n\t" . '<label for="' . $this->get_field_id( 'count' ) . '">' . __( 'Show post counts' ) . '</label><br />'; 
    297              
    298             /* HEIRARCHICAL */ 
    299             print "\n\t" . '<input type="checkbox" class="checkbox" id="' . $this->get_field_id( 'hierarchical' ) . '" name="' . $this->get_field_name( 'hierarchical' ) . '"' . checked( $hierarchical, true, false ) . ' />'; 
    300             print "\n\t" . '<label for="' . $this->get_field_id( 'hierarchical' ) . '">' . __( 'Show hierarchy' ) . '</label>'; 
    301              
    302             print "\n\t" . '</fieldset>'; 
    303             print "\n\t" . '</div>'; 
    304         } 
    305     } 
    306 } 
    307 /* Forked version of wp_dropdown_categories() */ 
    308 function mfields_dropdown_taxonomy_terms( $args = '' ) { 
    309     $defaults = array( 
    310         'show_option_all' => '', 'show_option_none' => '', 
    311         'orderby' => 'id', 'order' => 'ASC', 
    312         'show_last_update' => 0, 'show_count' => 0, 
    313         'hide_empty' => 1, 'child_of' => 0, 
    314         'exclude' => '', 'echo' => 1, 
    315         'selected' => 0, 'hierarchical' => 0, 
    316         'name' => 'cat', 'class' => 'postform', 
    317         'depth' => 0, 'tab_index' => 0 
    318     ); 
    319      
    320     $defaults['selected'] = ( is_category() ) ? get_query_var( 'cat' ) : 0; 
    321  
    322     $r = wp_parse_args( $args, $defaults ); 
    323  
    324     if ( !isset( $r['pad_counts'] ) && $r['show_count'] && $r['hierarchical'] ) { 
    325         $r['pad_counts'] = true; 
    326     } 
    327  
    328     $r['include_last_update_time'] = $r['show_last_update']; 
    329     extract( $r ); 
    330  
    331     $tab_index_attribute = ''; 
    332     if ( (int) $tab_index > 0 ) 
    333         $tab_index_attribute = " tabindex=\"$tab_index\""; 
    334  
    335     $categories = get_categories( $r ); 
    336     $name = esc_attr($name); 
    337     $class = esc_attr($class); 
    338      
    339     $id = ( !empty( $id ) ) ? esc_attr( $id ) : $name; 
    340      
    341     $output = ''; 
    342     if ( ! empty( $categories ) ) { 
    343         $output = "<select name='$name' id='$id' class='$class' $tab_index_attribute>\n"; 
    344  
    345         if ( $show_option_all ) { 
    346             $show_option_all = apply_filters( 'list_cats', $show_option_all ); 
    347             $selected = ( '0' === strval($r['selected']) ) ? " selected='selected'" : ''; 
    348             $output .= "\t<option value='0'$selected>$show_option_all</option>\n"; 
    349         } 
    350  
    351         if ( $show_option_none ) { 
    352             $show_option_none = apply_filters( 'list_cats', $show_option_none ); 
    353             $selected = ( '-1' === strval($r['selected']) ) ? " selected='selected'" : ''; 
    354             $output .= "\t<option value='-1'$selected>$show_option_none</option>\n"; 
    355         } 
    356  
    357         if ( $hierarchical ) 
    358             $depth = $r['depth'];  // Walk the full depth. 
    359         else 
    360             $depth = -1; // Flat. 
    361          
    362         $output .= mfields_walk_taxonomy_dropdown_tree( $categories, $depth, $r ); 
    363         $output .= "</select>\n"; 
    364     } 
    365  
    366     $output = apply_filters( 'wp_dropdown_cats', $output ); 
    367  
    368     if ( $echo ) 
    369         echo $output; 
    370  
    371     return $output; 
    372 } 
    373 /* Forked version of walk_category_dropdown_tree() */ 
    374 function mfields_walk_taxonomy_dropdown_tree() { 
    375     $args = func_get_args(); 
    376     // the user's options are the third parameter 
    377     if ( empty( $args[2]['walker'] ) || !is_a( $args[2]['walker'], 'Walker' ) ) 
    378         $walker = new mfields_walker_taxonomy_dropdown; 
    379     else 
    380         $walker = $args[2]['walker']; 
    381  
    382     return call_user_func_array( array( &$walker, 'walk' ), $args ); 
    383 } 
    384 /* Forked version of Walker_CategoryDropdown */ 
    385 class mfields_walker_taxonomy_dropdown extends Walker { 
     309        } 
     310        print "\n\t" . '</select>'; 
     311 
     312        /* 
     313         * Display Taxonomy As. 
     314         */ 
     315        print "\n\t" . '<fieldset><legend>' . esc_html__( 'Display Taxonomy As:', 'mfields-taxonomy-widget' ) . '</legend>'; 
     316        foreach( $this->templates as $name => $label ) { 
     317            $id = $this->get_field_id( 'template' ) . '-' . $name; 
     318            print "\n\t" . '<input type="radio" name="' . esc_attr( $this->get_field_name( 'template' ) ) . '" value="' . esc_attr( $name ) . '" id="' . esc_attr( $id ) . '" ' . checked( $name, $template, false ) . ' />'; 
     319            print "\n\t" . '<label for="' . esc_attr( $id ) . '">' . esc_html( $label ) . '</label><br />'; 
     320        } 
     321        print  "\n\t" . '</fieldset>'; 
     322 
     323        print "\n\t" . '<fieldset><legend>' . esc_html__( 'Advanced Options', 'mfields-taxonomy-widget' ) . '</legend>'; 
     324 
     325        /* 
     326         * Display Title? 
     327         */ 
     328        print "\n\t" . '<input type="checkbox" class="checkbox" id="' . esc_attr( $this->get_field_id( 'display_title' ) ) . '" name="' . esc_attr( $this->get_field_name( 'display_title' ) ) . '"' . checked( $display_title, true, false ) . ' />'; 
     329        print "\n\t" . '<label for="' . esc_attr( $this->get_field_id( 'display_title' ) ) . '">' . esc_html__( 'Display Title', 'mfields-taxonomy-widget' ) . '</label><br />'; 
     330 
     331        /* 
     332         * Show Post Counts? 
     333         */ 
     334        print "\n\t" . '<input type="checkbox" class="checkbox" id="' . esc_attr( $this->get_field_id( 'count' ) ) . '" name="' . esc_attr( $this->get_field_name( 'count' ) ) . '"' . checked( $count, true, false ) . ' />'; 
     335        print "\n\t" . '<label for="' . esc_attr( $this->get_field_id( 'count' ) ) . '">' . esc_html__( 'Show post counts', 'mfields-taxonomy-widget' ) . '</label><br />'; 
     336 
     337        /* 
     338         * Show Hierarchy? 
     339         */ 
     340        print "\n\t" . '<input type="checkbox" class="checkbox" id="' . esc_attr( $this->get_field_id( 'hierarchical' ) ) . '" name="' . esc_attr( $this->get_field_name( 'hierarchical' ) ) . '"' . checked( $hierarchical, true, false ) . ' />'; 
     341        print "\n\t" . '<label for="' . esc_attr( $this->get_field_id( 'hierarchical' ) ) . '">' . esc_html__( 'Show hierarchy', 'mfields-taxonomy-widget' ) . '</label>'; 
     342 
     343        print "\n\t" . '</fieldset>'; 
     344        print "\n\t" . '</div>'; 
     345    } 
     346} 
     347 
     348 
     349/* Custom version of Walker_CategoryDropdown */ 
     350class Mfields_Walker_Taxonomy_Dropdown extends Walker { 
     351    var $db_fields = array( 
     352        'id'     => 'term_id', 
     353        'parent' => 'parent' 
     354        ); 
     355 
    386356    var $tree_type = 'category'; 
    387     var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); 
    388      
    389     function start_el( &$output, $category, $depth, $args ) { 
    390         $pad = str_repeat( '&nbsp;', $depth * 3 ); 
    391         $cat_name = apply_filters( 'list_cats', $category->name, $category ); 
    392          
    393         if( $category->taxonomy === 'category' ) 
    394             $value = esc_attr( $category->term_id ); 
    395         else 
    396             $value = esc_attr( $category->slug ); 
    397              
    398         $output .= "\t<option class=\"level-$depth\" value=\"" . $value . "\""; 
    399          
    400         if( is_category() || is_tax() ) { 
    401             if ( $category->taxonomy === 'category' ) { 
    402                 if ( $category->term_id == $args['selected'] ) 
    403                     $output .= ' selected="selected"'; 
    404             } 
    405             else { 
    406                 if ( $category->slug == $args['selected'] ) 
    407                     $output .= ' selected="selected"'; 
    408             } 
    409         } 
    410         $output .= '>'; 
    411         $output .= $pad . $cat_name; 
    412         if ( $args['show_count'] ) 
    413         $output .= '&nbsp;&nbsp;('. $category->count .')'; 
     357 
     358    function start_el( &$output, $term, $depth, $args ) { 
     359        $url = get_term_link( $term, $term->taxonomy ); 
     360 
     361        $selected = ''; 
     362        if ( $url == $args['selected'] ) { 
     363            $selected .= ' selected="selected"'; 
     364        } 
     365 
     366        $text = str_repeat( '&nbsp;', $depth * 3 ) . $term->name; 
     367        if ( $args['show_count'] ) { 
     368            $text .= '&nbsp;&nbsp;('. $term->count .')'; 
     369        } 
    414370        if ( $args['show_last_update'] ) { 
    415             $format = 'Y-m-d'; 
    416             $output .= '&nbsp;&nbsp;' . gmdate( $format, $category->last_update_timestamp ); 
    417         } 
    418         $output .= "</option>\n"; 
    419     } 
    420 } 
    421  
    422  
    423 ?> 
     371            $text .= '&nbsp;&nbsp;' . gmdate( __( 'Y-m-d', 'mfields-taxonomy-widget' ), $term->last_update_timestamp ); 
     372        } 
     373 
     374        $class_name = 'level-' . $depth; 
     375 
     376        $output.= "\t" . '<option' . $selected . ' class="' . esc_attr( $class_name ) . '" value="' . esc_url( $url ) . '">' . esc_html( $text ) . '</option>' . "\n"; 
     377    } 
     378} 
Note: See TracChangeset for help on using the changeset viewer.